我有这种数据集(ID,V1,V2是我数据框的3个变量):
ID V1 V2
1 A 10
1 B 5
1 D 1
2 C 9
2 E 8
我想要一个新的数据框,对于每个ID,最大值为V2的行。例如,结果将是:
ID V1 V2
1 A 10
2 C 9
答案 0 :(得分:2)
使用plyr包中的ddply
(假设数据是样本)
library(plyr)
ddply(sample,.(ID),summarize,V1=V1[which.max(V2)],V2=max(V2))
ID V1 V2
1 1 A 10
2 2 C 9
答案 1 :(得分:1)
这是一种笨拙的代码,但它有效......
> mydf[with(mydf, ave(V2, ID, FUN = function(x) x == max(x))) == 1, ]
ID V1 V2
1 1 A 10
4 2 C 9
不那么笨拙:
do.call(rbind,
by(mydf, mydf$ID,
FUN = function(x) x[which.max(x$V2), ]))
# ID V1 V2
# 1 1 A 10
# 2 2 C 9