【发布时间】:2017-10-31 04:24:24
【问题描述】:
给定这个data.table:
library(data.table)
aa <- data.table(a = c(1, 2, 3), b = c(1, 2, NA), c = c(NA, 2, 3))
除
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,因为那里不允许使用矩阵。
【问题讨论】:
-
必须是
data.table吗?aa$b[is.na(aa$b)] <- 0或类似的是否足够好? -
@Phil,是的,它必须是
data.table。列向量是一些任意字符向量。在示例中,我使用b,但它可以是任何一组列。 -
这是可读的,但我不知道效率...
apply(aa,c(1,2),function(x){if(is.na(x)) 0 else x}) -
糟糕,我看错了你,你希望能够选择一个子集
标签: r data.table