ifelse的快速替代品,用于替换data.table

时间:2019-04-24 15:53:44

标签: r if-statement 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]
})

我认为答案可能在于this thread中的答复。任何人都可以帮助我将类似或其他方法应用于上述问题吗?预先非常感谢。

0 个答案:

没有答案