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

为什么R数据框中sum()求和与逐行直接相加结果不一致?

sum()的运行机制说明

R 中内置的sum()是聚合类函数,设计逻辑为接收任意多组数值输入后,将所有输入的元素全部合并为一个一维数值集合后统一求和,最终仅返回单个标量结果。
你传入的Daten$values1、Daten$values2、Daten$values3均为长度为3的向量,sum()会把3个向量的共9个元素全部累加得到103,将这个单值赋值给数据框列时,R会自动执行循环补齐规则,把103重复填充到所有行,就出现了示例中valcomb列全为103的结果。
而直接用+运算符相加的逻辑是向量逐元素运算,相同位置的元素两两相加,最终返回的是和输入向量长度相同的结果,正好匹配逐行求和的需求。

逐行求和的实现方案
  • 方法1:base R 专用函数rowSums()
    这是最简洁高效的实现方式,专门用于按行计算数据框/矩阵的数值和,列数较多时优势明显,还支持通过na.rm参数处理缺失值:
# 指定列计算行和
Daten$valcomb3 <- rowSums(Daten[, c("values1", "values2", "values3")], na.rm = TRUE)
  • 方法2:tidyverse 流式写法
    如果使用dplyr工具链,可以用rowwise()+sum()或者直接结合rowSums()实现更灵活的列选择:
library(dplyr)
# 写法1:按行作用sum
Daten <- Daten %>%
  rowwise() %>%
  mutate(valcomb4 = sum(c(values1, values2, values3), na.rm = TRUE)) %>%
  ungroup()

# 写法2:结合rowSums批量匹配列
Daten <- Daten %>%
  mutate(valcomb5 = rowSums(across(starts_with("values")), na.rm = TRUE))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:04