鉴于此数据。表:
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,例如b
和c
。这意味着我无法使用i
,因为那里不允许使用矩阵。
答案 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]