【问题标题】:ddply with which.max functionddply with which.max 函数
【发布时间】:2023-03-24 01:55:01
【问题描述】:

您也许可以帮助我:对于每个 ID,我希望提取具有最大“b”值的最大“a”值。换句话说,我希望扫描“b”值,找出最高的(这里 b=40)。 如果几个“a”具有相同的最高“b”值(这里a=20和a=30),那么我希望选择最高的“a”值(这里a=30)。

这是我到目前为止所做的:

df<- data.frame(ID=c('1','1','1','1','1','1'), a=c('10','20','30','10','2','30'), b=c('10','20','30','10','40', "40"))

library(plyr)

opt <- ddply(df,.(ID),summarise,
             a=a[which.max(b)])
opt

ID a
1  2

但是,我不明白:

ID a
1  30

非常感谢您的建议。请注意,与此示例数据集相反,我处理的实际数据集非常大。非常感谢!

【问题讨论】:

  • which.max 为您提供索引。对于值,只需使用max

标签: r plyr


【解决方案1】:

我们可以使用dplyrarrangebadescend order by group (ID)中,然后得到每个组的第一行。

library(dplyr)
df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1)

#   ID    a     b    
#  <fct> <fct> <fct>
#1  1     30    40 

如预期输出所示,如果我们只需要IDa 列,我们可以只需要select 他们

df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1) %>%
  select(ID, a)

我们也可以按升序arrange它们,然后使用n()选择最后一行

library(dplyr)
df %>%
  group_by(ID) %>%
  arrange(b, a) %>%
  slice(n()) %>%
  select(ID, a)

【讨论】:

  • 非常感谢您的时间和支持,它运行良好
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 2012-11-29
  • 2014-11-03
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多