R Data.table按多个列组列出的行平均值

R Data.table按多个列组列出的行平均值,r,data.table,R,Data.table,我有一个包含n列的data.table。每三个连续列代表三份样本。因此,我想对data.table中的每3列应用一个按行(mean、sd或a)计算的函数(三重数据中有多少个大于0)。要清楚,行不是组,列是分组的。我假设这涉及到.SDcols,但我找不到一个明确的例子,说明人们使用多个列组进行此操作。我可以转置它,但我想看看是否有一种简单的方法可以做到这一点,而不必来回翻转data.table。 以下是一些不起作用的示例代码: DT<-data.table(v0=1:100, v1=rnor

我有一个包含n列的data.table。每三个连续列代表三份样本。因此,我想对data.table中的每3列应用一个按行(mean、sd或a)计算的函数(三重数据中有多少个大于0)。要清楚,行不是组,列是分组的。我假设这涉及到.SDcols,但我找不到一个明确的例子,说明人们使用多个列组进行此操作。我可以转置它,但我想看看是否有一种简单的方法可以做到这一点,而不必来回翻转data.table。 以下是一些不起作用的示例代码:

DT<-data.table(v0=1:100, v1=rnorm(100), v2=rnorm(100), 
               v3=rnorm(100), v4=rnorm(100), v5=rnorm(100), 
               v6=rnorm(100))
vec<-names(DT[,2:length(DT)])  
vecls<-split(vec, rep(1:(length(vec)/3), each = 3))

DT[,.(Mean = rowMeans(.SD)), by=V0, .SDcols=vecls] 

DT一个选项是使用
split.default

DT[, lapply(split.default(.SD, as.integer(gl(length(vec), 3, length(vec)))), 
                   rowMeans), .SDcols = vec]

好的,这几乎可以完美地工作,如果我想将其更改为自定义函数(count instances>0),那么输出会有点混乱
DT[,lappy(split.default(.SD,gl(ncol(.SD),3,ncol(.SD))),函数(x)行和(x>0)),.SDcols=v1:v6]
它最终为所有原始列生成列。前2列是正确的,但后4列仅为0。我想我可以直接删除它,但我希望它能“正常工作”。@TBP我得到一个2列输出,就像在这个解决方案中一样
DT[,lappy(split.default(.SD,as.integer(gl(length(vec),3,length(vec))),函数(x)行和(x>0)),.SDcols=vec]