return 列具有 max/min 值的行,按组,使用 plyr::ddply
return rows with max/min value of column, by group, using plyr::ddply
我找到了答案(现在 deleted) to this question,我很好奇为什么它不起作用。
问题是:return最小值对应的行,按组。
例如,给定数据集:
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)
return每组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
我找到了答案(现在 deleted) to this question,我很好奇为什么它不起作用。
问题是:return最小值对应的行,按组。
例如,给定数据集:
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)
return每组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