我有一个n列的data.table。每三个连续的列代表一式三份的样品。因此,我想对data.table中的每3列按行(均值,sd或三个重复数中的多少> 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]
答案 0 :(得分:2)
一种选择是使用split.default
DT[, lapply(split.default(.SD, as.integer(gl(length(vec), 3, length(vec)))),
rowMeans), .SDcols = vec]