1

我有这种数据集(ID、V1、V2 是我的数据框的 3 个变量):

ID V1 V2 
1  A  10
1  B  5
1  D  1
2  C  9
2  E  8

我想要一个新的数据框,对于每个 ID,V2 中值为 max 的行。例如,结果将是:

ID V1 V2 
1  A  10
2  C  9
4

2 回答 2

2

ddply从 plyr 包中使用(假设数据是样本)

    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
于 2013-07-09T12:18:57.170 回答
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
于 2013-07-09T12:20:45.183 回答