在data.table中的列子集中用零替换NA

时间:2017-05-30 15:42:31

标签: r data.table

鉴于此数据。表:

library(data.table)
aa <- data.table(a = c(1, 2, 3), b = c(1, 2, NA), c = c(NA, 2, 3))

除了

之外,更换列子集中的NAs(例如仅b)的更好方法是什么?
cols = c("b")
aa[, (cols) := {dt <- .SD; dt[is.na(dt)] <- 0; dt}, .SDcols = cols]

我觉得我的方式不是很干净,必须有一种更易读的方式。谢谢!

[编辑]

我的第一个例子并不是很好,这里有一个更好的例子:

library(data.table)
aa <- data.table(a = c(1, 2, 3), b = c(1, 2, NA), c = c(NA, 2, 3), d = c(1, NA, 3))

我需要在任意一组列中替换NA,例如bc。这意味着我无法使用i,因为那里不允许使用矩阵。

1 个答案:

答案 0 :(得分:1)

对于data.table aa[is.na(b), b := 0]

,这可能更清晰

<强> [编辑]

我会这样写,但不确定这比你的更具可读性。

cols = c("b", "c")
aa[, (cols) := lapply(.SD, function(x){x[is.na(x)] <- 0; x}), .SDcols = cols]

<强> [编辑]

如果要将其应用于一系列列,则可以使用子集

cols&lt; - colnames(subset(aa,select = b:c))

aa [,(cols):= lapply(.SD,function(x){x [is.na(x)]&lt; -0; x}),. SDcols = cols]