R语言基于两列去重、保留第三列最大值行且保留所有列的方法
原因说明
你之前代码丢失x1列是因为summarise()函数的特性:该函数执行后仅会保留分组所用的列(x2、x3)以及你主动声明做聚合计算的列(此处的x4),其余列会被自动丢弃。要保留所有列可以用以下两种修改方案:
方案1:使用slice_max()(推荐,适配dplyr 1.0.0及以上版本)
这个函数可以直接按指定列提取每组最大值对应的完整行:
result <- df %>% group_by(x2, x3) %>% slice_max(x4, n = 1) %>% ungroup()
如果同组内有多行x4同时为最大值,该写法默认会返回所有符合条件的行;如果仅需要保留任意1行,可添加with_ties = FALSE参数:
slice_max(x4, n = 1, with_ties = FALSE)
方案2:使用filter()(适配所有版本dplyr)
通过判断行的x4值是否等于分组内最大值来筛选行,也能保留所有列:
result <- df %>% group_by(x2, x3) %>% filter(x4 == max(x4)) %>% ungroup()
内容的提问来源于stack exchange,提问作者Aweq
相关产品推荐
相关产品推荐

