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

为何sum(rep(NA,3),na.rm=TRUE)返回0?如何让全NA行返回NA?

关于R中缺失值求和的两个问题解答

一、sum(rep(NA, 3), na.rm = TRUE)返回0的逻辑

当设置na.rm = TRUE时,R会先移除所有NA值再执行求和操作。如果原向量全是NA,移除后就没有任何元素了——而数学上空集的和定义为加法单位元0,R遵循了这个数学惯例,所以返回0。

二、实现“忽略NA求和,但全NA行返回NA”的行求和方法

直接用rowSums无法同时满足需求,需要结合逻辑判断实现:

方法1:基础R代码

# 构造示例矩阵
mat <- matrix(c(NA, NA, NA, 2), nrow = 2)
# 先忽略NA计算行和
row_sums <- rowSums(mat, na.rm = TRUE)
# 找出所有元素都是NA的行
all_na_rows <- rowSums(is.na(mat)) == ncol(mat)
# 将全NA行的结果替换为NA
row_sums[all_na_rows] <- NA
row_sums
# 输出结果:[1] NA  2

方法2:tidyverse风格实现(需加载dplyr包)

library(dplyr)
mat %>%
  as.data.frame() %>%
  rowwise() %>%
  mutate(row_sum = ifelse(all(is.na(c_across())), NA, sum(c_across(), na.rm = TRUE))) %>%
  pull(row_sum)
# 输出结果:[1] NA  2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:32:21