You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言指定列行求和代码子集可用全量数据集报错问题

R中分组数据框行求和报错的解决方法

问题场景

现有一份包含9万余条观测、400个患者诊断相关变量的大型R数据集,需要对Code1至Code200列做行向求和,结果存入新列mytotal。
以下代码在2000条观测的子集上运行正常:

mysubset <- mysubset %>%
  mutate(mytotal = select(., Code1:Code200) %>% 
           rowSums(na.rm = TRUE))

但在数据结构完全一致的9万条全量数据集上运行相同代码时,抛出如下报错:

Adding missing grouping variables: `patient_num`
Error in `mutate()`:
! Problem while computing `utils = select(., Code1:Code200) %>% rowSums(na.rm = TRUE)`.
✖ `utils` must be size 1, not 92574.
ℹ The error occurred in group 1: patient_num = 123456789.

检索数小时未找到可行解决方案或替代实现,需要对应解决思路。

报错原因

报错核心是全量数据集为分组数据框(grouped dataframe),测试用的子集未保留分组属性。
带分组属性的数据集执行mutate时,会按每个独立分组拆分后运行计算逻辑:代码中嵌套的select(., Code1:Code200) %>% rowSums(na.rm = TRUE)在分组计算环境中,会返回全量数据集所有行的求和结果(长度为全量总行数92574),和当前分组的行数不匹配,因此触发长度校验报错,同时提示缺失分组变量patient_num。

解决方案

方案1:解除分组后运行原代码

计算前调用ungroup()移除数据集的分组属性即可正常运行原逻辑,如果后续需要保留分组,可以在计算完成后重新按原字段分组:

# 解除分组后计算
mydata <- mydata %>%
  ungroup() %>%
  mutate(mytotal = select(., Code1:Code200) %>% 
           rowSums(na.rm = TRUE))

方案2:使用dplyr原生行计算写法(推荐)

用across()选取待计算列,不需要嵌套select,在分组、未分组数据集上都能稳定运行,不会出现长度匹配问题:

mydata <- mydata %>%
  mutate(mytotal = rowSums(across(Code1:Code200), na.rm = TRUE))

内容的提问来源于stack exchange,提问作者dani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:27:21