如何在R中对含0、1、NA的两变量求和并排除NA干扰?
解决R语言中含NA变量的求和问题
你需要的是仅当两个变量均非NA时计算它们的和,否则返回NA(或排除这些行),以下是可行的几种方法:
方法1:使用rowSums(简洁高效)
rowSums默认会保留NA(即只要输入中有NA,结果就是NA),正好匹配你的需求:
library(tidyverse) df <- df |> mutate(naked_man = rowSums(select(., naked_fj, naked_naked), na.rm = FALSE))
方法2:用ifelse显式判断NA
通过条件判断直接过滤含NA的行的计算逻辑:
df <- df |> mutate(naked_man = ifelse(is.na(naked_fj) | is.na(naked_naked), NA, naked_fj + naked_naked))
方法3:使用case_when(适配多条件扩展场景)
如果后续需要添加更多逻辑规则,case_when的可读性和扩展性更强:
df <- df |> mutate(naked_man = case_when( is.na(naked_fj) | is.na(naked_naked) ~ NA_real_, TRUE ~ naked_fj + naked_naked ))
验证结果
运行任一方法后,执行以下代码查看新变量的频数分布:
table(df$naked_man, useNA = "ifany")
此时结果中:
0对应两行均为0的观测数1对应一行0一行1的观测数2对应两行均为1的观测数<NA>对应至少有一个变量为NA的观测数
如果需要直接排除含NA的结果,只需修改table的参数:
table(df$naked_man, useNA = "no")
内容的提问来源于stack exchange,提问作者Kim Rohde
相关产品推荐
相关产品推荐

