根据条件汇总数据框

时间:2013-07-09 12:11:37

标签: r dataframe subset summarization

我有这种数据集(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

2 个答案:

答案 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