R 基于数据表中的多列创建累积值的新列
这是我在寻找答案几天后的第一篇帖子。我正艰难地从R数据帧转换到R数据表 我想要实现的是基于多个列/变量的指标创建某种累积值 使用data frame,我可以非常轻松地做到这一点:R 基于数据表中的多列创建累积值的新列,r,data.table,R,Data.table,这是我在寻找答案几天后的第一篇帖子。我正艰难地从R数据帧转换到R数据表 我想要实现的是基于多个列/变量的指标创建某种累积值 使用data frame,我可以非常轻松地做到这一点: 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]&
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
}
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$b10)+作为数字(DT[,3]>0)]
上面的代码有效。但是,如果我想将分析的列数增加到(比如)10,那么它似乎并不友好。对于数据帧,我可以将索引从1:3更改为1:10
感谢您对我如何改进上面数据表的代码的任何评论。如果能与我分享关于这类实际问题的任何好的资源或文档,那将是非常有帮助的:在数据表的循环中引用列索引。谢谢。您可以在通过
.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
您仍然可以在
数据上使用循环。表s:DT$b1 0)+DT$b1
@sindri_baldur谢谢!但由于这个版本的代码调用$,我只是好奇如果数据表包含数百万行,它是否会像使用.SD的版本一样快。在这种情况下,我希望.SD
解决方案会快得多。可以添加非常好的解决方案和.SDCols
来根据需要轻松控制所需的列。
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