R语言使用mutate结合rowSums统计语言数量报错如何解决?
R语言dplyr分组数据按行求和报错解决方案
问题根因
你的真实数据集part_langs是分组数据框(grouped_df),从str输出可以看到它按Participant.Private.ID完成了分组,每个分组仅包含1行数据。
报错的核心逻辑如下:
- dplyr管道中的
mutate操作会按分组独立执行 - 你直接调用
part_langs[2:14]取的是整个原始数据集的13列共7行数据,rowSums计算后得到长度为7的向量 - 每个分组仅有1行,长度为7的向量无法匹配长度为1的分组,因此触发维度不匹配报错
你的测试数据集是未分组的普通数据框,因此相同逻辑可以正常运行。
修复方案
方案1:先取消分组再计算(最推荐)
先调用ungroup()取消分组,同时用.指代管道中传递的当前数据,避免引用原始全量数据集:
num <- part_langs %>% ungroup() %>% mutate(num.langs = rowSums(.[2:14]))
方案2:用across语法选列(稳定性更高)
不需要依赖列位置,直接按列名范围选择所有需要统计的二值列,避免后续列顺序变化导致统计错误:
num <- part_langs %>% ungroup() %>% mutate(num.langs = rowSums(across(French:Other)))
方案3:保留分组结构的写法
如果业务需要保留原数据的分组属性,可以调用cur_data()指代当前分组内的数据,避免维度不匹配:
num <- part_langs %>% mutate(num.langs = rowSums(cur_data()[2:14]))
内容的提问来源于stack exchange,提问作者talkingood
相关产品推荐
相关产品推荐

