使用plyr :: ddply

时间:2017-02-07 20:00:54

标签: r plyr

我找到了答案(现在deleted)到this question,我很好奇为什么它不起作用。

问题是:按组返回对应于最小值的行。

例如,给定数据集:

df <- data.frame(State = c(rep('AK',4),rep('RI',4)),
                   Company = LETTERS[1:8],
                   Employees = c(82L, 104L, 37L, 24L, 19L, 118L, 88L, 42L)) 

......正确的答案是:

    State Company Employees
 1:    AK       D        24
 2:    RI       E        19

可以通过例如

获得
library(data.table); setDT(df)[ , .SD[which.min(Employees)], by = State]

我的问题是这个plyr::ddply命令无法工作的原因:

library(plyr)
ddply(df, .(State), summarise, Employees=min(Employees), 
      Company=Company[which.min(Employees)])
# returns:
#   State Employees Company
# 1    AK        24       A
# 2    RI        19       E

换句话说,为什么which.min(Employees)为每个组而不是c(4,1)返回1?请注意,在ddply之外,这有效:

summarise(df, minEmp = min(Employees), whichMin = which.min(Employees))
#   minEmp whichMin
# 1     19        5

我没有多少使用plyr,但我想知道正确的做法,如果有合理的话。

1 个答案:

答案 0 :(得分:1)

我得到了正确的答案。不确定你的情况..

library(plyr)
ddply(df, .(State), function(x) x[which.min(x$Employees),])
  State Company Employees
1    AK       D        24
2    RI       E        19