我是data.table包的新手。 我正在研究一个大数据。表(60列,900万行) 并希望在所有列中将所有负值替换为0。
我目前的解决方案是:
dt2 <- dt[, lapply(.SD,function(x) {ifelse(x < 0,0,x)})]
这需要约。每列8s。 我想使用:=运算符并跳过该函数以使其更快。 但我不知道如何引用.SD
选择的当前列e.g。
dt[, lapply(.SD, .SD[<0] := 0]
我该怎么做?
答案 0 :(得分:3)
我们可以使用set
方式进行分配。循环遍历列序列,然后获取值小于0(i
)的行索引,在'j'中指定列索引,并将与这些索引对应的值设置为0。
for(j in seq_along(dt)){
set(dt, i = which(dt[[j]]<0), j=j, value = 0)
}
或另一种选择是
dt[, lapply(.SD, function(x) pmax(0, x))]