如何在R中按两个变量分组计算其余变量均值并解决报错
问题解决方法
错误原因分析
- 分组逻辑错误:连续调用
group_by()会覆盖前一次分组,无法实现双变量联合分组;且group_by行末尾缺失%>%,导致管道中断,这是触发tbl_vars错误的直接原因。 - 变量名笔误:代码中
M1MT1应为数据实际列名M1T1。 - 汇总语法问题:
summarise_at的list(name = mean)会生成带后缀的新列,不符合保留原列名的需求;同时未处理NA值,会导致均值结果为NA。
修正后的代码
mtmm_data1 %>% group_by(cntry_lan, admdw) %>% summarise(across(M1T1:M3T3, ~mean(.x, na.rm = TRUE)), .groups = "drop")
代码说明
group_by(cntry_lan, admdw):同时按两个变量分组,确保每个cntry_lan下的每个admdw分组单独计算均值。across(M1T1:M3T3, ~mean(.x, na.rm = TRUE)):用across()替代已逐步淘汰的summarise_at(),对M1T1到M3T3的所有列计算均值,na.rm = TRUE忽略NA值,且保留原列名。.groups = "drop":计算完成后取消分组,返回普通数据框(如需保留分组可改为"keep")。
运行结果示例
基于提供的测试数据,运行后会得到如下结果:
| cntry_lan | admdw | M1T1 | M1T2 | M1T3 | M2T1 | M2T2 | M2T3 | M3T1 | M3T2 | M3T3 |
|---|---|---|---|---|---|---|---|---|---|---|
| ATGER | group1 | NA | NA | NA | 1 | 2 | 2 | 1 | 1 | 2 |
| ATGER | group2 | 7 | 5 | 5 | NA | NA | NA | 7 | 4 | 4 |
| ATGER | group3 | 7 | 6 | 5 | NA | NA | NA | 6 | 6 | 5 |
内容的提问来源于stack exchange,提问作者Korkut
相关产品推荐
相关产品推荐

