我希望能按组合计算列的总和。在下面的例子中,我希望分别按 r1
、r2
和 r3
计算对应的列 (v1
和 v2
)、(v3
和 v4
) 以及 (v5
和 v6
) 的总和。
我可以使用下面的 sapply
语句来完成这个操作,并且得到正确答案。但是,所需的代码比较复杂。是否有人可以向我展示如何使用包 data.table
或者 rollapply
等其他选项来完成同样的操作呢?我还没有探索过这些选项。
如果这是一个重复的问题,我很抱歉。
my.data <- read.table(text= "
r1 r2 r3 t1 t2 t3 v1 v2 v3 v4 v5 v6
1 0 0 10 20 30 1 0 0 0 0 0
1 0 0 10 20 30 1 1 0 0 0 0
1 0 0 10 20 30 1 0 1 0 0 0
1 0 0 10 20 30 1 0 1 1 0 0
1 0 0 10 20 30 0 0 0 0 0 0
0 1 0 10 20 30 0 1 1 1 1 1
0 1 0 10 20 30 0 0 1 1 1 1
0 1 0 10 20 30 0 0 0 1 1 1
0 1 0 10 20 30 0 0 0 0 1 1
0 1 0 10 20 30 0 0 0 0 0 1
0 0 1 10 20 30 1 1 1 1 1 1
0 0 1 10 20 30 1 0 1 1 1 1
0 0 1 10 20 30 1 0 0 1 1 1
0 0 1 10 20 30 1 0 0 0 1 1
0 0 1 10 20 30 1 0 0 0 0 1
", header=TRUE, na.strings=NA)
my.data$my.group <- which(my.data[,1:3]==1, arr.ind=TRUE)[,2]
my.data
my.sums <- t(sapply(split(my.data[,7:(ncol(my.data)-1)], my.data$my.group), function(i) sapply(seq(2, ncol(i), 2), function(j) sum(i[,c((j-1),j)], na.rm=TRUE))))
my.sums
# [,1] [,2] [,3]
# 1 5 3 0
# 2 1 5 9
# 3 6 5 9
r1
,r2
”等等时,是指相对于列对吗?此外,除了这个示例中显示的列之外,还有更多的列吗? - Ricardo Saporta