如何在R语言中用另一列值替换数据框中的缺失值
解决用var2替换var1缺失值的问题
首先我们先还原你的示例数据框,方便复现和测试:
df <- data.frame( ID = c("per1", "per2", "per3", "per4", "per5", "per6"), var1 = c(1, 3, NA, 4, 7, NA), var2 = c(NA, NA, 4, 7, NA, 8), var3 = c(3, 5, 6, 9, NA, NA) )
你原来的代码df$var1[is.na(df$var1)] <- df$var2没达到预期的原因很简单:你把整个var2列赋值给了var1的缺失位置,但实际上你只需要var2中对应var1缺失的那些行的值。
方法一:基础R解决方案
只需要对var2也做同样的行筛选,取对应位置的值即可:
df$var1[is.na(df$var1)] <- df$var2[is.na(df$var1)]
运行后查看结果,完全符合你的预期:
ID var1 var2 var3 1 per1 1 NA 3 2 per2 3 NA 5 3 per3 4 4 6 4 per4 4 7 9 5 per5 7 NA NA 6 per6 8 8 NA
方法二:tidyverse(dplyr)解决方案
如果你习惯用tidyverse语法,用mutate配合if_na会更简洁直观:
library(dplyr) df <- df %>% mutate(var1 = if_na(var1, var2))
如果你的dplyr版本较低,也可以用ifelse实现相同效果:
df <- df %>% mutate(var1 = ifelse(is.na(var1), var2, var1))
这样处理后就能完美实现你想要的替换逻辑啦!
内容的提问来源于stack exchange,提问作者Abdel
相关产品推荐
相关产品推荐

