使用R中的data.table将所有数字列中的N替换为0

时间:2017-05-26 10:58:27

标签: r if-statement data.table lapply na

我想使用data.table语法编写将在所有数字列中用0替换NAs的代码。

我的代码如下:

Background

你能告诉我为什么我的代码不起作用以及我应该怎么做才能纠正它?

您的建议将不胜感激。

2 个答案:

答案 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的代码,当有多个元素时,我们使用ifelsereplace,并且输出应该被分配回感兴趣的列,否则,我们将只指定列在.SDcols中,不会在原始数据集中更新

dt[, (needed_names) := lapply(.SD, function(x) 
          replace(x, is.na(x), 0)), .SDcols = needed_names]