这是我寻找答案几天后的第一篇文章。我正从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。
感谢任何有关如何改进上面数据表代码的评论。如果可以就这种类型的实际问题与我共享任何好的资源或文档,这也将非常有帮助:在数据表循环中引用列索引。谢谢。
答案 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