【发布时间】:2021-10-25 02:48:48
【问题描述】:
我在这里找到了一个相反的问题:R: Replace multiple values in multiple columns of dataframes with NA
但我无法让它与我的数据一起使用。就我而言,我想找到 NA 并将它们替换为另一列中的值。
我有一个数据集 dta1,其中有 2493 个我有兴趣处理的变量。除了这 2493 个变量之外,还有一列 var_fill。当 vars 中命名的任何列是 NA 时,我想用 var_fill 中的值填充它。我尝试对上面发布的解决方案进行逆向工程,但它给了我多个警告:
1: In `[<-.factor`(`*tmp*`, list, value = structure(c(16946L, ... : invalid factor level, NA generated
2: In x[...] <- m : number of items to replace is not a multiple of replacement length
而且也不起作用。
vars <- sprintf("var%0.4d",seq(1:2493))
dta1[vars] <- lapply(dta1[vars], function(x) replace(x,is.na(x), dta1$var_fill) )
我很抱歉,但由于这些数据的大小,我无法生成完整的可重现数据集,因此我对其进行了大量子集化,但我正在处理大约 3000 列和 240K 行数据。
这是数据:https://drive.google.com/file/d/1oj_nhd99ftgN1Bh930_IRQftLACR2FO9/view?usp=sharing
虽然只有 10 个人,但它太大了。
【问题讨论】:
-
你试过
dta1[vars] <- lapply(dta1[vars], function(x) ifelse(is.na(x), dta1$var_fill, x))吗?您需要将因子变量强制转换为字符以避免这些警告,您可以在读取数据时这样做 -
您想将该行中的所有 NA 行值替换为该行的 var_fill 列值,还是更奇特的?
-
您无需与我们分享所有数据。具有 10 行和 4-5 列的示例数据框以及预期输出足以帮助我们理解问题。
-
@rawr,我试过了,但它做了一些奇怪的事情,所以我选择了下面的选项,但感谢您的回复!