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

dplyr基于另一数据框更新df值 未匹配项置0实现方法

R dplyr 按ID匹配更新字段值实现方案

核心需求:保留旧数据框df1的所有ID记录,将未在更新数据框df2中匹配到对应ID的记录的iso_pres字段值设为0,匹配到的记录保留对应取值。


前置准备

先加载dplyr包,构造示例测试数据:

library(dplyr)

# 旧数据框
df1 <- data.frame(
  ID = c("1504a", "1504b", "1504c", "1705a", "1705b"),
  iso_pres = c(1, 1, 1, 1, 1)
)

# 更新用数据框
df2 <- data.frame(
  ID = c("1504b", "1705a", "1705b"),
  iso_pres = c(1, 1, 1)
)

实现代码

简洁版(固定匹配值场景)

如果仅需要判断ID是否存在,不需要同步df2中iso_pres的变动值,直接用%in%判断赋值即可:

df_result <- df1 %>%
  mutate(iso_pres = ifelse(ID %in% df2$ID, iso_pres, 0))

通用版(支持同步df2字段更新)

如果后续df2中匹配ID对应的iso_pres可能存在非1的更新值,用左连接的写法可以直接同步更新值,未匹配到的记录统一填充0,适配更多场景:

df_result <- df1 %>%
  select(ID) %>%
  left_join(df2, by = "ID") %>%
  mutate(iso_pres = replace(iso_pres, is.na(iso_pres), 0))

结果验证

运行代码后输出的结果和预期完全一致:

ID iso_pres
1 1504a        0
2 1504b        1
3 1504c        0
4 1705a        1
5 1705b        1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:03:20