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

R语言如何基于两列id的对应匹配关系填充指定列的缺失值

方案1:base R 实现(直接填充原有Value列)

# 构造反向id匹配查找表,仅保留Value非缺失的行
lookup <- df[!is.na(df$Value), c("id2", "id1", "Value")]
colnames(lookup) <- c("id1", "id2", "fill_value")

# 匹配填充缺失值
df$Value <- ifelse(is.na(df$Value), 
                   lookup$fill_value[match(paste(df$id1, df$id2), paste(lookup$id1, lookup$id2))],
                   df$Value)

运行后直接得到填充完成的Value列,和你预期的第一种输出完全一致。


方案2:tidyverse 实现(新增Value2列存储匹配值)

如果需要保留原始Value列的原始值,单独存储匹配填充结果可以用该方案:

library(dplyr)

df <- df %>%
  mutate(
    # 生成统一配对键,将两个id排序后拼接,保证正反配对的行key完全一致
    pair_key = purrr::pmap_chr(list(id1, id2), ~paste(sort(c(...)), collapse = "_"))
  ) %>%
  group_by(pair_key) %>%
  mutate(
    # 同配对组内,Value缺失时取组内非缺失值填充,非缺失行的Value2设为NA
    Value2 = ifelse(is.na(Value), max(Value, na.rm = TRUE), NA_real_)
  ) %>%
  ungroup() %>%
  select(-pair_key)

运行后得到的Value2列完全符合你要求的第二种输出格式。如果同配对组存在多个非缺失值,可自行调整max()为first()、mean()等符合业务逻辑的取值规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:04