如何在R中基于另一DataFrame为目标数据框创建条件列?
R语言实现两个数据框按ID匹配新增Error列
步骤1:构造示例数据
你可以直接运行以下代码生成你给出的两个测试数据框:
# 构造dataframe1 df1 <- data.frame( ID = 1:10, Var1 = c(40,30,70,70,40,80,20,20,50,70), Var2 = c(45,35,65,15,15,45,15,15,35,25) ) # 构造dataframe2 df2 <- data.frame( ID = c(1,2,5,6,9,10,21,22), Error = c(0,1,1,1,0,NA,0,NA) )
方法1:基础R实现
逻辑:先做左连接保留df1的所有行,再仅把未匹配到df2的ID对应的Error值替换为0,不会覆盖df2原本存在的NA值:
# 按ID左连接两个数据框 merge_df <- merge(df1, df2, by = "ID", all.x = TRUE) # 仅将不在df2中的ID对应的Error设为0 merge_df$Error[!merge_df$ID %in% df2$ID] <- 0 # 查看最终结果 merge_df
方法2:dplyr包实现
用管道操作代码更简洁,逻辑和基础R完全一致:
library(dplyr) result <- df1 %>% # 按ID左连接df2的Error列 left_join(df2, by = "ID") %>% # 未匹配到的ID赋值0,匹配到的保留原值(包括NA) mutate(Error = if_else(!ID %in% df2$ID, 0, Error)) # 查看最终结果 result
两种方法输出的结果都和你给出的预期完全一致,ID=10对应的NA值会被完整保留,未匹配到的ID(3、4、7、8)的Error都会被赋值为0。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

