我想使用data.table语法编写将在所有数字列中用0替换NAs的代码。
我的代码如下:
Background
你能告诉我为什么我的代码不起作用以及我应该怎么做才能纠正它?
您的建议将不胜感激。
答案 0 :(得分:0)
可替换地:
num_cols <- sapply(dt, is.numeric)
dt2 <- dt[,num_cols,with=F]
dt <- cbind(dt[,!num_cols, with=F],dt2)
答案 1 :(得分:-1)
我们可以使用set
执行此操作,方法是将needed_names
中指定为NA的元素(set
)和i
循环到0
for(j in needed_names){
set(dt, i = which(is.na(dt[[j]])), j=j, value = 0)
}
dt
# a b c
#1: 1 0 a
#2: 2 0 b
#3: 3 0 c
#4: 0 20 d
#5: 0 21 e
#6: 0 22 f
#7: 10 23 g
#8: 11 24 NA
#9: 12 25 NA
关于OP的代码,当有多个元素时,我们使用ifelse
或replace
,并且输出应该被分配回感兴趣的列,否则,我们将只指定列在.SDcols
中,不会在原始数据集中更新
dt[, (needed_names) := lapply(.SD, function(x)
replace(x, is.na(x), 0)), .SDcols = needed_names]