R语言group_by+summarise报错:替换行数与数据行数不匹配
问题解决方法
核心排查点
首先检查分组变量的列名是否与数据框CURVAS中的列名完全匹配:你问题描述中提到按Municipality分组,但代码里写的是Municipio,如果数据框实际列名是Municipality,这个拼写错误会导致分组逻辑异常,生成全NA的分组键,进而引发报错。
优化后的代码(解决报错+简化写法)
使用dplyr的across函数批量处理小时变量求和,同时用n_distinct替代length(unique()),代码更简洁且避免手动重复输入的错误:
library(dplyr) # 先确认dplyr版本不低于1.0.0(across函数需要此版本) if (packageVersion("dplyr") < "1.0.0") { install.packages("dplyr") library(dplyr) } CURVAS_Cliente_suma <- CURVAS %>% group_by(CODIGO, Municipio) %>% # 确保这里的列名和数据框完全一致 summarise( # 批量对所有H_00到H_23的变量求和 across(starts_with("H_"), ~sum(.x, na.rm = TRUE)), # 统计唯一客户数量 n_clientes = n_distinct(COD_CONTRATO_ENCRIPTADO), .groups = "drop" # 可选,取消分组状态,避免后续操作的分组干扰 )
错误原因分析
你遇到的报错通常是由于以下情况之一:
- 分组变量列名拼写错误,导致分组逻辑失效,生成的分组数量与预期不符,进而引发汇总时的长度不匹配。
- 旧版本dplyr对
summarise中多变量处理的兼容性问题,新版本的dplyr(1.0.0+)用across可以避免这类问题。 - 手动重复编写24个求和语句时,可能出现的变量名拼写错误(比如某个H_xx写错),导致部分变量处理异常。
内容的提问来源于stack exchange,提问作者Monica gmez vadillo
相关产品推荐
相关产品推荐

