Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于数据表中的多列创建累积值的新列_R_Data.table - Fatal编程技术网

R 基于数据表中的多列创建累积值的新列

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]&

这是我在寻找答案几天后的第一篇帖子。我正艰难地从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]>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