如何在R DataFrame中按名称合并行:部分列求和部分列求平均
按名称合并DataFrame并对不同列执行求和/均值计算
需要按name列合并DataFrame中名称相同的行:其中column1和column2执行求和操作,column3计算平均值,真实数据集包含500行12列。
示例原始数据
df <- data.frame( name = c("a", "a", "b", "c"), column1 = c(53, 16, 89, 67), column2 = c(43, 19, 99, 12), column3 = c(0.73, 0.69, 0.12, 0.52) )
期望处理结果
# name column1 column2 column3 # a 69 62 0.71 # b 89 99 0.12 # c 67 12 0.52
现有代码
df <- df %>% group_by(name) %>% summarise(across(c(column1, column2), sum))
修改方案
你可以在summarise中直接添加对column3的均值计算,以下两种写法都能满足需求:
写法1:简洁拆分指定
这种方式直观易懂,适合少量列的不同处理需求:
library(dplyr) df <- df %>% group_by(name) %>% summarise( across(c(column1, column2), sum), column3 = mean(column3) )
写法2:统一映射列与函数
如果后续有更多列需要不同的聚合逻辑,可以用列表形式指定列和对应函数,扩展性更强:
df <- df %>% group_by(name) %>% summarise( across( .cols = c(column1, column2, column3), .fns = list( column1 = sum, column2 = sum, column3 = mean ), .names = "{.col}" # 保持原列名不变 ) )
运行上述代码后,就能得到你需要的合并结果:相同name的行被合并,column1和column2求和,column3取平均值。
内容的提问来源于stack exchange,提问作者Tobias
相关产品推荐
相关产品推荐

