如何基于缺失值和另一数据框为数据集创建变量?
场景一:按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
相关产品推荐
相关产品推荐

