使用R语言dplyr依据ID列值替换var3列中NA值失败求助
问题原因与解决方法
错误根源
在R中,不能用== NA来判断缺失值。因为NA代表“未知值”,任何与NA的比较运算(包括==)结果都是NA,而非TRUE/FALSE。这会导致你的case_when条件永远不会被触发,自然无法完成NA值的替换。
修正后的代码
基础修正版
直接将var3 == NA替换为R中判断缺失值的标准函数is.na(var3):
library(dplyr) df %>% mutate(var3 = case_when( is.na(var3) & ID == 3 ~ 5, is.na(var3) & ID == 5 ~ 5, is.na(var3) & ID == 7 ~ 5, TRUE ~ var3 ))
优化简洁版
如果多个ID需要替换为同一个值,可以把目标ID放入向量中,简化条件写法:
df %>% mutate(var3 = case_when( is.na(var3) & ID %in% c(3,5,7) ~ 5, TRUE ~ var3 ))
运行结果
修正后执行代码,会得到正确替换缺失值后的数据集:
ID var1 var2 var3 1 1 a 1 21 2 2 b 1 50 3 3 c 1 40 4 3 c 0 5 5 4 d 1 29 6 5 e 1 45 7 5 f 0 5 8 7 g 0 5 9 7 h 1 5 10 8 h 0 46
内容的提问来源于stack exchange,提问作者Loz
相关产品推荐
相关产品推荐

