在R语言中计算多分组均值的方法求助
解决多分组均值计算的问题
你遇到的问题主要出在两个地方:语法使用错误,以及没处理数据里的NA值,这导致你的分组均值计算没能得到预期结果。我来帮你一步步修正:
先拆解你的代码问题
- 语法错误:你写的
summarize_all (mean())是不对的——summarize_all需要接收一个函数(比如mean),而不是函数执行的结果(mean()会直接返回一个值,而非函数本身)。 - NA值处理:你的数据里存在
NA,而mean()默认会因为NA返回NA,这会导致结果里出现大量缺失值,不符合你的期望。
推荐的解决方案(用dplyr最新语法)
现在dplyr官方更推荐用across()替代已经软弃用的summarize_all,写法更灵活清晰。结合你的数据结构,正确代码如下:
1. 先构造你的示例测试数据
df <- data.frame( col1 = c(1,2,3,4,5), # type列 col2 = c("A","A","A","B","B"), # gender列 col3 = c(1,2,1,1,3), # var1 col4 = c(3,NA,3,4,4), # var2 col5 = c(2,5,5,NA,5) # var3 )
2. 计算分组均值
library(dplyr) avg_values <- df %>% group_by(col1, col2) %>% # 按type(col1)和gender(col2)组合分组 summarize( across(col3:col5, ~mean(.x, na.rm = TRUE)), # 对var1-var3列计算均值,自动忽略NA .groups = "drop" # 取消分组状态,得到普通数据框格式 )
3. 如果习惯用旧版summarize_all
如果你更倾向于用summarize_all,也可以这样写(同样要处理NA值):
avg_values <- df %>% group_by(col1, col2) %>% summarize_all(mean, na.rm = TRUE)
结果验证
运行上述代码后,你会得到每个col1+col2组合对应的均值。比如示例数据的输出会是:
# A tibble: 5 × 5 col1 col2 col3 col4 col5 <dbl> <chr> <dbl> <dbl> <dbl> 1 1 A 1 3 2 2 2 A 2 NA 5 3 3 A 1 3 5 4 4 B 1 4 NA 5 5 B 3 4 5
(注:示例数据里部分分组只有一行,所以均值就是自身;如果你的真实数据有重复分组,就会得到正确的聚合均值)
内容的提问来源于stack exchange,提问作者user14375619
相关产品推荐
相关产品推荐

