r - ifelse 的快速替代方法,用于替换 data.table 中的字符串
问题描述
我有一个大的 data.tables 列表(总共约 10m 行),其中包含许多 NA 的字符串变体,例如“N/A”或“Unknown”。对于我的所有 data.tables 中的所有列,我想用缺失值替换这些观察结果。
数据的简化示例如下:
library(data.table)
dt1 <- data.table(v1 = 1:4, v2 = c("yes", "no", "unknown", NA))
dt2 <- data.table(v1 = c("1", "2", "not applicable", "4"), v2 = c("yes", "yes", "n/a", "no"))
master_list <- list(dt1 = dt1, dt2 = dt2)
以下解决方案有效,但需要很长时间(完整数据约 30 分钟),因此我试图找到更有效的解决方案:
unknowns <- c("n/a", "not applicable", "unknown")
na_edit <- function(x){ifelse(x %in% unknowns, NA, x)}
master_list <- lapply(master_list, function(dt) {
dt[, lapply(.SD, na_edit)]
})
> master_list$dt1
v1 v2
1: 1 yes
2: 2 no
3: 3 <NA>
4: 4 <NA>
我尝试了类似以下的方法,消除了对 . 的需要ifelse
,但我无法跨多个列进行这项工作。
lapply(master_list, function(dt) {
dt[v2 %in% unknowns, v2 := NA]
})
我觉得答案可能在于这个线程的回复。任何人都可以帮助我对上述问题应用类似或其他方法吗?提前谢谢了。