首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用which.max函数

用which.max函数
EN

Stack Overflow用户
提问于 2018-09-24 09:09:58
回答 1查看 149关注 0票数 0

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

以下是我迄今所做的工作:

代码语言:javascript
复制
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

但是,我不明白:

代码语言:javascript
复制
ID a
1  30

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 09:15:38

我们可以使用dplyrarrange ba按组结束desc (ID),然后得到每个组的第一行。

代码语言:javascript
复制
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

代码语言:javascript
复制
df %>%
  group_by(ID) %>%
  arrange(desc(b), desc(a)) %>%
  slice(1) %>%
  select(ID, a)

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

代码语言:javascript
复制
library(dplyr)
df %>%
  group_by(ID) %>%
  arrange(b, a) %>%
  slice(n()) %>%
  select(ID, a)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52475958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档