WGr*_*ray 5 r unique match plyr
我正在尝试从数据集中提取SUBJ,BLK和的每个组合的第一条记录。TR简化的集合,sampleData,是:
SUBJ BLK TR BEG END
1 1234 1 1 111021 111021
2 1234 1 1 111400 111021
3 1234 1 1 111566 111021
4 1234 1 1 111765 111021
5 1234 2 2 132050 133113
6 1234 2 2 133123 133113
7 1234 2 2 133479 133113
8 1234 2 2 133762 133113
9 5678 1 1 82503 82502
10 5678 1 1 82902 82502
11 5678 1 1 83102 82502
12 5678 1 1 83310 82502
13 5678 2 2 274870 288224
14 5678 2 2 288225 288224
15 5678 2 2 288535 288224
16 5678 2 2 288802 288224
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时:
ddplyFirst <- ddply(sampleData, .(SUBJ, BLK, TR), summarize,
Tr.match = match(unique(TR), TR))
Run Code Online (Sandbox Code Playgroud)
我明白了:
ddplyFirst
SUBJ BLK TR Tr.match
1 1234 1 1 1
2 1234 2 2 1
3 5678 1 1 1
4 5678 2 2 1
Run Code Online (Sandbox Code Playgroud)
我不知道如何从这个转到我想要得到的,其中包括 和BEG值END或BEG - END。
现在,事实证明,在上面的例子中,END是一个唯一的数字,所以我可以这样做:
first <- with(sampleData, match(unique(END), END))
Run Code Online (Sandbox Code Playgroud)
这给了我:
sampleData[first,]
SUBJ BLK TR BEG END
1 1234 1 1 111021 111021
5 1234 2 2 132050 133113
9 5678 1 1 82503 82502
13 5678 2 2 274870 288224
Run Code Online (Sandbox Code Playgroud)
问题是完整的数据集有202,616 条记录长,我不能保证BEG、和END的不同组合具有唯一值。SUBJBLKTR
另外,我想学习如何解决更一般的情况,对我来说,现在将获得每个SUBJ、BLK和TR组合中的第一个记录。
当然,更一般的情况是获取每个SUBJ、BLK和TR组合中的第 n 条记录。如果有人可以向我展示如何执行这些“更”通用或“最”通用解决方案中的一个或另一个,我将非常感激。
这里不需要使用summarise,你可以这样做(使用head来获取第一行)
ddply(sampleData, .(SUBJ, BLK, TR), function(x) head(x,1))
SUBJ BLK TR BEG END
1 1234 1 1 111021 111021
2 1234 2 2 132050 133113
3 5678 1 1 82503 82502
4 5678 2 2 274870 288224
Run Code Online (Sandbox Code Playgroud)
或者更一般地获得第 n 行。n 你可以这样做:
ddply(sampleData, .(SUBJ, BLK, TR), function(x) x[min(row.n,nrow(x),])
Run Code Online (Sandbox Code Playgroud)