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

如何批量将匹配观测的非NA值填充至数据框多变量NA位置?

解决方案

方法1:data.table批量赋值(高效直接)

通过遍历需要填充的变量列,结合data.table的连接赋值语法,实现批量填充:

library(data.table)
setDT(df)

# 筛选出需要填充的变量(排除标识符列)
fill_cols <- setdiff(names(df), c("URN", "OBS"))

# 批量填充每个变量
lapply(fill_cols, function(col) {
  df[df[!is.na(get(col))], (col) := get(paste0("i.", col)), on = c("URN", "OBS")]
})

# 查看结果
df

这段代码会自动对每个目标变量,匹配URN和OBS相同的观测,用非NA值覆盖对应位置的NA。

方法2:分组聚合后合并(适合数据逻辑明确的场景)

如果每个URN+OBS组内同一变量的非NA值一致,可以先分组提取非NA值,再合并回原数据框:

library(data.table)
setDT(df)

fill_cols <- setdiff(names(df), c("URN", "OBS"))

# 按URN和OBS分组,提取每个变量的首个非NA值(确保组内非NA值唯一)
agg_df <- df[, lapply(.SD, function(x) x[!is.na(x)][1]), by = .(URN, OBS), .SDcols = fill_cols]

# 合并回原数据框,批量填充NA
df[agg_df, on = c("URN", "OBS"), (fill_cols) := mget(paste0("i.", fill_cols))]

df

这种方法的优势是先统一每个组的变量值,再一次性填充,适合组内非NA值无冲突的情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:26:37