我正在尝试为 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
当我尝试这个时:
ddplyFirst <- ddply(sampleData, .(SUBJ, BLK, TR), summarize,
Tr.match = match(unique(TR), TR))
我明白了:
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
我不知道如何从这个到我想要的,其中包括
BEG
和 END
值或 BEG - END
.现在,事实证明,在上面的例子中,
END
是一个唯一的数字,所以我可以这样做:first <- with(sampleData, match(unique(END), END))
这给了我:
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
问题是完整的数据集有 202,616 条记录,我不能保证
BEG
或 END
对 SUBJ
的不同组合具有唯一值, BLK
, 和 TR
.另外,我想学习如何解决更一般的情况,对我来说,现在将获得每个
SUBJ
中的第一条记录。 , BLK
, 和 TR
组合。当然,更一般的情况是获取每个
SUBJ
中的第 n 条记录。 , BLK
, 和 TR
组合。如果有人能告诉我如何做这些“更”一般或“最”一般解决方案中的一个或另一个,我将不胜感激。
最佳答案
无需使用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
或者更一般地获得第 n 行.n 你可以这样做:
ddply(sampleData, .(SUBJ, BLK, TR), function(x) x[min(row.n,nrow(x),])
关于R 数据框 - 如何提取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15042646/