R数据框-如何提取唯一值

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)

我不知道如何从这个转到我想要得到的,其中包括 和BEGENDBEG - 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

另外,我想学习如何解决更一般的情况,对我来说,现在将获得每个SUBJBLKTR组合中的第一个记录。

当然,更一般的情况是获取每个SUBJBLKTR组合中的第 n 条记录。如果有人可以向我展示如何执行这些“更”通用或“最”通用解决方案中的一个或另一个,我将非常感激。

ags*_*udy 3

这里不需要使用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)