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

如何基于缺失值和另一数据框为数据集创建变量?

场景一:按subjects匹配score,且var1为NA时score设为NA

给定两个数据框:

df = data.frame(subjects = 1:10,
                var1 = c('a',NA,'b',NA,'c',NA,'d','e','f','g'))

g = data.frame(subjects = c(1,3,5,7,8,9,10),
               score = c(1,2,1,3,2,4,1) )

需求:将g中的score导入df,同时满足若var1为NA,则score也为NA。

用dplyr实现(简洁直观)

library(dplyr)

df_result <- df %>%
  left_join(g, by = "subjects") %>%
  mutate(score = ifelse(is.na(var1), NA, score))

也可以用case_when让逻辑更清晰:

df_result <- df %>%
  left_join(g, by = "subjects") %>%
  mutate(score = case_when(
    !is.na(var1) ~ score,
    TRUE ~ NA_real_
  ))

基础R实现

df$score <- g$score[match(df$subjects, g$subjects)]
df$score[is.na(df$var1)] <- NA

场景二:仅保留g中存在的subjects对应的score,其余设为NA

给定数据框:

df = data.frame(subjects = 1:10,
                var1 = c('a','e','b','c','c','b','d','e','f','g'))

g = data.frame(subjects = c(1,3,5,7,8,9,10),
               score = c(1,2,1,3,2,4,1) )

需求:仅当subjects在g中存在时导入对应的score,其余样本score设为NA(与示例结果一致)。

用dplyr实现

直接左连接即可,未匹配的行自动填充NA:

library(dplyr)

df_result <- df %>%
  left_join(g, by = "subjects")

基础R实现

df$score <- g$score[match(df$subjects, g$subjects)]

两种方法得到的结果均与你给出的示例完全一致。


内容的提问来源于stack exchange,提问作者An116

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:30:45