如何对重复分组数据求均值并合并行?(R语言实现)
解决R语言分组聚合去重求均值的问题
问题说明
你有如下重复的分组数据:
Name id total Abc 101, 500, Abc 101, 500, Def 102, 400, Def 102, 400, Def 102, 400,
需要按Name和id分组,对total求均值后合并为唯一行,得到结果:
Abc 101 500 Def 102 400
你的代码问题
- 第一段代码:分组列名与数据实际列名不匹配(数据里是
Name/id,你写的Employee.ID),聚合列名错误(数据里是total,你写的Total.Bonus),还缺少闭合括号。 - 第二段代码:
summarise_each已经被dplyr弃用,现在推荐用across;同时语法存在括号错位问题,matches的用法也不符合你的需求。
正确实现步骤
1. 数据清理(处理逗号)
原始数据里的列带有逗号,需要先清理并转换为数值类型:
library(dplyr) # 模拟原始数据(如果是从文件读取,替换为read.table/read.csv等) df <- data.frame( Name = c("Abc", "Abc", "Def", "Def", "Def"), id = c("101,", "101,", "102,", "102,", "102,"), total = c("500,", "500,", "400,", "400,", "400,") ) # 清理逗号并转换数据类型 df_cleaned <- df %>% mutate( id = as.integer(gsub(",", "", id)), total = as.numeric(gsub(",", "", total)) )
2. 分组聚合求均值
按Name和id分组,计算total的均值:
result <- df_cleaned %>% group_by(Name, id) %>% summarise(total = mean(total, na.rm = TRUE), .groups = "drop") # 查看结果 print(result)
执行后会得到你想要的输出:
# A tibble: 2 × 3 Name id total <chr> <int> <dbl> 1 Abc 101 500 2 Def 102 400
如果你的原始数据读取后已经是无逗号的数值类型,可以直接跳过数据清理步骤,仅执行分组聚合部分。
内容的提问来源于stack exchange,提问作者Dead_pool
相关产品推荐
相关产品推荐

