r - 如何用其他列的值估算多列中的 NA?
问题描述
我有一个包含 200 个变量的数据集,这些变量都有一些缺失值。200 个变量中的每一个都有另一列,我想用它来估算缺失值。
示例数据:
have <- data.frame(ID = c(1:10), var1 = c(runif(7), NA, NA, NA), var1_fill = runif(10))
ID var1 var1_fill
1 1 0.68783885 0.140508053
2 2 0.74672512 0.001270443
3 3 0.09607276 0.917535359
4 4 0.03222775 0.363960434
5 5 0.03560543 0.901288399
6 6 0.46595122 0.725499220
7 7 0.42781890 0.781295939
8 8 NA 0.737999219
9 9 NA 0.456795266
10 10 NA 0.314562042
如果我想对一列进行估算,我会使用以下代码:
have$var1_imputed <- ifelse(is.na(have$var1) == T, have$var1_fill, have$var1)
ID var1 var1_fill var1_imputed
1 1 0.68783885 0.140508053 0.68783885
2 2 0.74672512 0.001270443 0.74672512
3 3 0.09607276 0.917535359 0.09607276
4 4 0.03222775 0.363960434 0.03222775
5 5 0.03560543 0.901288399 0.03560543
6 6 0.46595122 0.725499220 0.46595122
7 7 0.42781890 0.781295939 0.42781890
8 8 NA 0.737999219 0.73799922
9 9 NA 0.456795266 0.45679527
10 10 NA 0.314562042 0.31456204
我无法弄清楚如何编写一个循环来为 200 个变量执行此操作,因为我不能使用 $ 来引用列名。在实际数据集中,变量名称不遵循任何模式,如 var1、var2 等。但是,原始的 200 个变量位于第 7 到 206 列中,用于各自插补的列是 207 到 406。用于插补的列也与原始列具有相同的名称,但具有附加后缀,如示例中所示(var1 和 var1_fill)。
解决方案
一个data.table
选项使用fcoalesce
setDT(df)[
,
setNames(
Map(fcoalesce, .SD[, 7:206], .SD[, 207:406]),
paste0(names(.SD[, 7:206]), "_imputed")
)
]
推荐阅读
- date - 两个日期之间的月份列表作为月份和年份
- javascript - fullPage.js 没有缓动
- lit-element - lit-element styles within html template versus static styles getter?
- javascript - Remove from JS object where key value is an empty array
- azure - How to get character matches in Azure Search index instead of substrings
- python - 有没有办法生成项目列表的所有唯一排列
- json - Select specific field and get result from array in jsonb field
- javascript - 如何在表格上有一个“粘性”电话号码格式的占位符?
- webpack - 在 Webpack 中是否可以有多个具有多个相对输出的子目录入口点
- python-3.x - python3 tkinter:我可以得到没有对齐列的参差不齐的网格吗?