我有大量的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]
})
我认为答案可能在于this thread中的答复。任何人都可以帮助我将类似或其他方法应用于上述问题吗?预先非常感谢。