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

如何实现rowSums在全NA行返回NA,非全NA行将NA视为0求和?

解决全NA行求和返回NA的需求

基础R实现

我们可以通过先判断每行是否全为NA,再结合rowSums完成需求:

  1. 先创建示例数据:
a <- c(5, NA, NA)
b <- c(6, 6, NA)
df <- data.frame(a, b)
  1. 计算每行非NA值的数量,再根据数量决定返回值:
# 统计每行非NA元素的个数
row_non_na_count <- rowSums(!is.na(df[, c("a", "b")]))
# 生成求和列:全NA行返回NA,其他行将NA视为0求和
df$c <- ifelse(row_non_na_count == 0, NA, rowSums(df[, c("a", "b")], na.rm = TRUE))

运行后得到的结果完全符合预期:

a  b  c
1  5  6 11
2 NA  6  6
3 NA NA NA

dplyr实现(适配tidyverse工作流)

如果习惯使用dplyr,可以按行处理数据:

library(dplyr)

df <- df %>%
  rowwise() %>%
  # 判断当前行a、b列是否全为NA,是则返回NA,否则求和(NA按0计算)
  mutate(c = if(all(is.na(c_across(a:b)))) NA else sum(c_across(a:b), na.rm = TRUE)) %>%
  ungroup()

该方法通过rowwise()开启按行操作,c_across(a:b)选中目标列,all(is.na(...))判断是否全NA,最终生成符合规则的求和列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:01:04