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

使用dplyr与rowwise按行求和异常:结果为全行总和而非单行

问题分析与修复方案

你的代码里有两个关键问题,导致算出的是所有行的总和,而非每行的求和结果:

  1. 错误对prca取反
    需求是把三个变量加起来,但你写了-prca,这直接把求和变成了减prca,完全偏离需求。而且prca全是NA,取反后还是NA,na.rm=T会直接忽略这个值,相当于只算了beq和txditc的总和。

  2. sum函数的传参方式错了
    在rowwise()环境里,直接写sum(beq, txditc, -prca, na.rm=T)时,beq、txditc这些都是整个列的向量,sum会把这三个向量里的所有元素全加起来,而不是针对每行的三个值求和。正确的做法是把当前行的三个值打包成一个向量,再丢给sum计算。

修正后的代码

library(dplyr)

a <- tibble(beq=c(7.823,8.962,13.014,6.095,6.482), 
            txditc=c(0.000,0.357,0.651,0.000,0.000),
            prca=c(NA,NA,NA,NA,NA))

a <- a %>%
  rowwise() %>%
  mutate(beq_new = sum(c(beq, txditc, prca), na.rm = TRUE)) %>%
  ungroup() # 处理完建议取消行分组,避免后续操作踩坑

验证结果

修正后每行的beq_new就是对应行三个变量的和(NA按0算),结果如下:

beqtxditcprcabeq_new
7.8230.000NA7.823
8.9620.357NA9.319
13.0140.651NA13.665
6.0950.000NA6.095
6.4820.000NA6.482

另外,要是不想用rowwise(),用rowSums更简洁:

a <- a %>%
  mutate(beq_new = rowSums(select(., beq, txditc, prca), na.rm = TRUE))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:35:25