使用plyr::ddply按组返回列的最大/最小值为的行

使用plyr::ddply按组返回列的最大/最小值为的行,r,plyr,R,Plyr,我(现在)找到了答案,我很好奇为什么它不起作用 问题是:按组返回与最小值对应的行 例如,给定数据集: 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)) 例如,可以通过 library(data.t

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

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

例如,给定数据集:

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)) 
例如,可以通过

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)
为每个组返回1,而不是
c(4,1)
?请注意,在
ddply
之外,此功能可以:

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

我不经常使用
plyr
,但是如果有合理的方法,我想知道正确的方法

我得到了正确的答案。我对你的案子不太清楚

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

@hrbrmstr我看到你回复了我的评论,但后来它消失了——只是想知道使用
plyr
的正确方法是什么……好吧,这很简单,我会在获得许可后接受它如何给出结果@C8H10N4O2当时出现了什么问题?您的解决方案没有问题。它起作用了。我以前试过的(如问题中所述)不起作用。
library(plyr)
ddply(df, .(State), function(x) x[which.min(x$Employees),])
  State Company Employees
1    AK       D        24
2    RI       E        19