您也许可以帮助我:对于每个ID,我希望提取最大的"a“值,其中有最大的"b”值。换句话说,我希望扫描"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我非常感谢你的建议。请注意,与此示例数据集相反,我处理的实际数据集相当大。非常感谢!
发布于 2018-09-24 09:15:38
我们可以使用dplyr、arrange b和a按组结束desc (ID),然后得到每个组的第一行。
library(dplyr)
df %>%
group_by(ID) %>%
arrange(desc(b), desc(a)) %>%
slice(1)
# ID a b
# <fct> <fct> <fct>
#1 1 30 40 如预期输出所示,如果只需要ID和a列,则只需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)https://stackoverflow.com/questions/52475958
复制相似问题