You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:56:30