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

如何实现全缺失值行求和为NA,否则累加非缺失值?

解决方案

要实现你的需求,我们可以通过判断每行是否全为缺失值,再结合行求和来得到结果:

  • 当整行所有值都是NA时,求和结果设为NA
  • 当行中至少有一个非缺失值时,累加所有非缺失值

Base R 实现代码

values1 <- c(1,2,NA,NA,NA,NA,2,3)
values2 <- c(1,2,NA,4,NA,NA,2,3)
values3 <- c(1,2,NA,4,5,NA,2,3)

df <- data.frame(values1,values2,values3)

# 计算每行的非缺失值数量,根据数量判断求和逻辑
df$tot <- ifelse(
  rowSums(!is.na(df[, c('values1','values2','values3')])) == 0,  # 判断是否整行全为NA
  NA,  # 全NA则返回NA
  rowSums(df[, c('values1','values2','values3')], na.rm = TRUE)  # 否则累加非缺失值
)

df

代码逻辑解释

  1. rowSums(!is.na(df[, ...])):统计每行的非缺失值个数,结果为0时表示整行都是NA
  2. ifelse()函数根据上述判断结果,分别返回NA或行求和结果(rowSums加na.rm=TRUE忽略缺失值求和)

运行后得到的结果中,第3行和第6行(整行全NA)的tot列会显示为NA,其他行则正常累加非缺失值。

可选:dplyr 风格实现

如果你习惯使用tidyverse工具链,也可以用行级操作实现:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(
    tot = if(all(is.na(c(values1, values2, values3)))) {
      NA
    } else {
      sum(c(values1, values2, values3), na.rm = TRUE)
    }
  ) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:41:08