如何基于列NA值条件新增数据列?代码生成全NA问题解决
问题排查与解决方法
问题根源
在R中,不能直接用!=或==判断NA值——任何与NA的比较运算结果都会返回NA。你写的a6b!= NA会让每一行的条件判断结果全为NA,而if_else遇到NA条件时会返回NA作为对应结果,这就是jk列全变成NA的原因。
正确实现方式
提供两种简洁可行的解决方法:
方法1:用is.na()做NA判断
将条件改为!is.na(a6b),明确识别a6b是否为非NA值:
Combined_Data %>% mutate(jk = if_else(!is.na(a6b), a6b, a6))
方法2:用dplyr::coalesce()函数(更推荐)
coalesce()的作用是返回第一个非NA的输入值,完美匹配你的需求——优先取a6b的值,a6b为NA时取a6的值:
Combined_Data %>% mutate(jk = coalesce(a6b, a6))
验证结果
用你提供的测试数据验证:
library(dplyr) df <- tibble(a6 = c(45, 62, NA, 92), a6b = c(NA, 32, 55, 200)) # 执行coalesce方法 df %>% mutate(jk = coalesce(a6b, a6))
输出结果与预期完全一致:
# A tibble: 4 × 3 a6 a6b jk <dbl> <dbl> <dbl> 1 45 NA 45 2 62 32 32 3 NA 55 55 4 92 200 200
内容的提问来源于stack exchange,提问作者Ali Inayat
相关产品推荐
相关产品推荐

