如何使用R合并data frame中同ID冗余数据并提取对应列极值
R语言实现分组聚合的两种常用方案
首先先构造和你场景一致的示例数据框方便复现:
df <- data.frame( id = rep("A", 3), col2 = c(1013574, 1014005, 1014005), col3 = c(1014475, 1014475, 1014435) )
注:如果你的实际数据列名不同,把代码中的对应列名替换为你自己的即可。
方案1:使用dplyr包(最常用的tidyverse风格写法)
如果已经安装过tidyverse直接用即可,代码可读性很高:
library(dplyr) result <- df %>% # 按ID列分组 group_by(id) %>% # 分组聚合:第二列取最小值,第三列取最大值 summarise( col2 = min(col2), col3 = max(col3) )
运行后得到的结果和你预期完全一致,每个ID仅保留一行,对应列分别为分组最小值、最大值。
方案2:基础R自带函数实现(无需安装第三方包)
用基础R的aggregate函数也可以完成需求:
# 分别对两列做聚合后按ID合并 result <- merge( aggregate(col2 ~ id, data = df, FUN = min), aggregate(col3 ~ id, data = df, FUN = max), by = "id" )
内容的提问来源于stack exchange,提问作者leelee
相关产品推荐
相关产品推荐

