R语言mutate中排除NA计算变量和的问题求助
解决方法
根据你的描述和数据特征(每行至少有一个NA),你实际需要的是将两个变量合并:取每行中非NA的那个变量的值,两个都为NA时新变量保留NA。以下是具体实现:
核心问题分析
- 你尝试的第一个代码中,
na.rm = TRUE参数位置错误,mutate函数本身不接受该参数,且+运算只要有NA就返回NA,因此结果全为NA。 - 第二个代码用
sum(..., na.rm = TRUE)会将NA视为0,导致两个都为NA的行被统计为0,不符合你的预期。
正确代码
方法1:使用coalesce函数(最简洁)
coalesce函数会返回输入中第一个非NA的值,完美匹配你的需求:
library(tidyverse) df <- df |> mutate(naked_man = coalesce(naked_fj, naked_naked))
方法2:使用case_when(逻辑更直观)
通过条件判断明确取值规则:
library(tidyverse) df <- df |> mutate(naked_man = case_when( !is.na(naked_fj) ~ naked_fj, !is.na(naked_naked) ~ naked_naked, TRUE ~ NA_real_ ))
运行上述代码后,新变量naked_man的频数会符合你的预期:0的数量为244,1的数量为163,其余为NA。
内容的提问来源于stack exchange,提问作者Kim Rohde
相关产品推荐
相关产品推荐

