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

R语言sum()无缺失值全数值数据行求和结果为0问题排查

错误原因

你的代码有2个核心问题,直接导致求和结果异常:

  • 你没有正确引用数据框中的列:传给sum()的是带双引号的列名字符串,不是列里存储的实际数值。注意:包含空格、方括号等特殊字符的列名,在tidyverse语法中需要用反引号(`)包裹引用,不能用双引号,双引号包裹的内容会被识别为普通文本字符串,而非列名。as.numeric()处理纯文本列名时,因为文本无法转换为合法数值,会返回NA,配合na.rm = TRUE参数移除所有NA后,求和结果自然为0。
  • 管道执行的修改没有赋值回原对象:你用%>%执行逐行计算、新增列的操作后,没有将结果重新赋值给df_structure,原始数据框并没有被修改,后续直接调用summary(df_structure$sum_emissions)本身就会因为找不到列报错。
  • 补充说明:你给出的示例数据中仅包含4个排放相关列,和你描述的“5个变量求和”不符,实际使用时请补全所有需要计算的列即可。
正确实现方式

写法1:保留原有的逐行计算逻辑

dplyr的rowwise()模式下,需要用c_across()批量选取行内的列值:

library(dplyr)

df_structure <- df_structure %>%
  rowwise() %>% 
  mutate(
    sum_emissions = sum(
      c_across(c(
        `Particeles_PM10_[kg]_WTW_whole transport chain`,
        `SO2_[kg]_WTW_whole transport chain`,
        `NOX_[kg]_WTW_whole transport chain`,
        `NMHC_[kg]_WTW_whole transport chain`
      )),
      na.rm = TRUE
    )
  ) %>%
  ungroup() # 计算完成后解除行分组,避免后续操作异常

# 查看计算结果统计
summary(df_structure$sum_emissions)

写法2:更高效的向量化计算(推荐)

逐行rowwise()运算效率较低,对于整行求和的场景,用向量化的rowSums()运算速度更快,还可以通过列名匹配规则自动选列,不用手动输入所有长列名:

library(dplyr)

df_structure <- df_structure %>%
  mutate(
    # 匹配所有后缀为WTW_whole transport chain的排放列自动纳入计算
    sum_emissions = rowSums(across(ends_with("WTW_whole transport chain")), na.rm = TRUE)
  )

summary(df_structure$sum_emissions)

运行以上代码后,就能得到正确的逐行总排放量结果,不会再出现全0的问题。

内容的提问来源于stack exchange,提问作者David Færgeman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:57:21