【发布时间】:2017-02-07 20:00:53
【问题描述】:
我找到了this question 的答案(现在是deleted),我很好奇为什么它不起作用。
问题是:按组返回最小值对应的行。
例如,给定数据集:
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) 为每个组返回1,而不是c(4,1)?请注意,在ddply 之外,此方法有效:
summarise(df, minEmp = min(Employees), whichMin = which.min(Employees))
# minEmp whichMin
# 1 19 5
我很少使用plyr,但我想知道正确的方法,如果有一个合理的方法。
【问题讨论】:
-
@hrbrmstr 我看到你回复了我的评论,但后来它消失了——只是好奇使用
plyr的正确方法是什么......