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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:27:03