r - R:将1000列中的NA更改为另一列的值
问题描述
我在这里找到了一些相反的问题: 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 人,也无法发布。
解决方案
将列转换为字符并将NA
值替换为相应的var_fill
值。
dta1$var_fill <- as.character(dta1$var_fill)
dta1[vars] <- lapply(dta1[vars], function(x) {
x <- as.character(x)
x[is.na(x)] <- dta1$var_fill[is.na(x)]
x
})
在dplyr
,您可以使用coalesce
.
library(dplyr)
dta1 <- dta1 %>% mutate(across(all_of(vars), ~coalesce(., var_fill)))
推荐阅读
- c# - 将主键添加到现有 sqlite 表时,xamarin 应用程序崩溃
- c - 如何确保密码的长度没有限制?
- django - Django REST 框架中的可配置 SAML SSO 身份验证
- python - Anaconda 中的 PyQt5 安装问题
- postgresql - 获取触发触发器的查询字符串
- azure - 使用 power shell 添加密钥保管库访问策略不起作用
- android - Admob 横幅隐藏列表视图片段的最后一项
- python - 如何在熊猫中使用 python 循环替换缺失值?
- r - 使用行名更改数据表中行的背景颜色
- string - Flutter/Dart 中单引号和双引号的区别