对变量中每个元素的第一行进行子集化
subsetting the first row of each element in a variable
我有下面显示的这个数据集
Name ID DATES R
1 @0CC 71476 20000704 11
2 @0CC 71476 20001204 11
3 @0RM 49960 20000131 2
4 @0RM 73565 20000919 1
5 @0RM 59451 20001023 1
6 @0RM 44457 20001214 1
7 @0TL 48061 20000627 31
8 @0TL 19824 20000929 3
9 @0TL 70970 20001211 1
10 @0TL 73862 20001212 2
11 @0TL 48061 20001227 31
12 @1AJ 58875 20001214 1
13 @1AJ 56014 20001214 3
14 @1AJ 47340 20001214 3
15 @1AJ 19813 20001214 3
16 @1AL 44416 20000303 31
17 @1AL 59184 20000413 323
18 @1AL 44416 20000517 31
19 @1AL 52718 20000621 1
20 @1AL 59184 20000707 323
21 @1AL 59184 20000801 323
22 @1AL 72832 20001127 43
23 @1AL 73568 20001130 3
24 @1AL 72832 20001211 43
25 @1FF 58781 20000719 1
26 @1FF 44505 20000801 12
27 @1FF 73559 20001110 1
28 @1FF 44505 20001218 12
29 @1FF 47276 20001227 3
我想做的是,对于每个唯一名称和每个唯一 ID,我想创建此数据框的一个子集,例如
Name ID DATES R
1 @0CC 71476 20000704 11
3 @0RM 49960 20000131 2
4 @0RM 73565 20000919 1
5 @0RM 59451 20001023 1
6 @0RM 44457 20001214 1
7 @0TL 48061 20000627 31
8 @0TL 19824 20000929 3
9 @0TL 70970 20001211 1
10 @0TL 73862 20001212 2
12 @1AJ 58875 20001214 1
13 @1AJ 56014 20001214 3
14 @1AJ 47340 20001214 3
15 @1AJ 19813 20001214 3
16 @1AL 44416 20000303 31
17 @1AL 59184 20000413 323
19 @1AL 52718 20000621 1
22 @1AL 72832 20001127 43
23 @1AL 73568 20001130 3
25 @1FF 58781 20000719 1
26 @1FF 44505 20000801 12
27 @1FF 73559 20001110 1
29 @1FF 47276 20001227 3
我正在考虑使用两个 for 循环
for(i in unique(noanalysttest$IBTKR2)){
for(j in unique(noanalysttest$AMASKCD)){
R2<-subset(DT)
}
R2
但这并没有给我正确的解决方案。非常感谢您的帮助。
谢谢!
我们可以在按 'Name' 和 'ID'
分组后使用 dplyr
中的 slice
library(dplyr)
df1 %>%
group_by(Name, ID) %>%
slice(1)
或者 base R
选项是
df1[!duplicated(df1[c("Name", "ID")]),]
或使用data.table
library(data.table)
unique(setDT(df1), by = c("Name", "ID"))
或者按照@Frank 的建议
setDT(df1)[, .SD[1L], by = .(Name, ID)]
我有下面显示的这个数据集
Name ID DATES R
1 @0CC 71476 20000704 11
2 @0CC 71476 20001204 11
3 @0RM 49960 20000131 2
4 @0RM 73565 20000919 1
5 @0RM 59451 20001023 1
6 @0RM 44457 20001214 1
7 @0TL 48061 20000627 31
8 @0TL 19824 20000929 3
9 @0TL 70970 20001211 1
10 @0TL 73862 20001212 2
11 @0TL 48061 20001227 31
12 @1AJ 58875 20001214 1
13 @1AJ 56014 20001214 3
14 @1AJ 47340 20001214 3
15 @1AJ 19813 20001214 3
16 @1AL 44416 20000303 31
17 @1AL 59184 20000413 323
18 @1AL 44416 20000517 31
19 @1AL 52718 20000621 1
20 @1AL 59184 20000707 323
21 @1AL 59184 20000801 323
22 @1AL 72832 20001127 43
23 @1AL 73568 20001130 3
24 @1AL 72832 20001211 43
25 @1FF 58781 20000719 1
26 @1FF 44505 20000801 12
27 @1FF 73559 20001110 1
28 @1FF 44505 20001218 12
29 @1FF 47276 20001227 3
我想做的是,对于每个唯一名称和每个唯一 ID,我想创建此数据框的一个子集,例如
Name ID DATES R
1 @0CC 71476 20000704 11
3 @0RM 49960 20000131 2
4 @0RM 73565 20000919 1
5 @0RM 59451 20001023 1
6 @0RM 44457 20001214 1
7 @0TL 48061 20000627 31
8 @0TL 19824 20000929 3
9 @0TL 70970 20001211 1
10 @0TL 73862 20001212 2
12 @1AJ 58875 20001214 1
13 @1AJ 56014 20001214 3
14 @1AJ 47340 20001214 3
15 @1AJ 19813 20001214 3
16 @1AL 44416 20000303 31
17 @1AL 59184 20000413 323
19 @1AL 52718 20000621 1
22 @1AL 72832 20001127 43
23 @1AL 73568 20001130 3
25 @1FF 58781 20000719 1
26 @1FF 44505 20000801 12
27 @1FF 73559 20001110 1
29 @1FF 47276 20001227 3
我正在考虑使用两个 for 循环
for(i in unique(noanalysttest$IBTKR2)){
for(j in unique(noanalysttest$AMASKCD)){
R2<-subset(DT)
}
R2
但这并没有给我正确的解决方案。非常感谢您的帮助。
谢谢!
我们可以在按 'Name' 和 'ID'
分组后使用dplyr
中的 slice
library(dplyr)
df1 %>%
group_by(Name, ID) %>%
slice(1)
或者 base R
选项是
df1[!duplicated(df1[c("Name", "ID")]),]
或使用data.table
library(data.table)
unique(setDT(df1), by = c("Name", "ID"))
或者按照@Frank 的建议
setDT(df1)[, .SD[1L], by = .(Name, ID)]