根据数据表中的多个列创建一个新的累积值列

时间:2019-09-12 06:57:37

标签: r data.table

这是我寻找答案几天后的第一篇文章。我正从R数据帧过渡到R数据表有困难。

我要实现的是基于多个列/变量的指标创建某种累加值。

我可以使用数据框很容易地做到这一点:

DF = data.frame(
a1 = c(1, 2, 3, 4, 5), 
a2 = c(1, 2, 3, 4, 5), 
a3 = c(1, 2, 3, 4, NA) 
)

DF$b1<-as.numeric(0)

for(i in 1:3) {
DF$b1<-as.numeric(DF[i]>0)+DF$b1
}

但是,对我来说,在数据表中并不是那么简单。我所做的是:

DT<-setDT(DF)

DT[,b1:= as.numeric(DT[,1]>0)+as.numeric(DT[,2]>0)+as.numeric(DT[,3]>0)]

上面的代码有效。但是,如果我想将分析的列数增加到10(例如),这似乎并不友好。对于数据帧,我可以将索引从1:3更改为1:10。

感谢任何有关如何改进上面数据表代码的评论。如果可以就这种类型的实际问题与我共享任何好的资源或文档,这也将非常有帮助:在数据表循环中引用列索引。谢谢。

1 个答案:

答案 0 :(得分:0)

通过rowSums将表转换为逻辑表后,您可以尝试.SD > 0,即

DT[, b1 := rowSums(.SD > 0)][]

#   a1 a2 a3 b1
#1:  1  1  1  3
#2:  2  2  2  3
#3:  3  3  3  3
#4:  4  4  4  3
#5:  5  5 NA NA