【问题标题】:return rows with max/min value of column, by group, using plyr::ddply使用 plyr::ddply 按组返回具有最大/最小值列的行
【发布时间】: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 的正确方法是什么......

标签: r plyr


【解决方案1】:

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

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

【讨论】:

  • 这很简单,我会在允许的情况下接受
  • 现在给你结果了吗? @C8H10N4O2 那是什么问题?
  • 您的解决方案没有问题。有用。我之前尝试过的(如问题所述)没有奏效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2019-06-24
  • 2021-04-10
相关资源
最近更新 更多