我有一个像这样的矩阵:
> y
[,1] [,2] [,3] [,4]
[1,] 17 14 5 8
[2,] 7 2 17 2
[3,] 10 18 6 6
[4,] 6 11 4 11
[5,] 5 9 4 9
和矢量
> group
[1] 1 2 2 3
组向量表示第1列在第1组中,第2列和第3列在第2组中,第3列在第3组中。我想在y中组合列(通过加法),以便将所有列分配给特定的组被加在一起,即我得到:
[,1] [,2] [,3]
[1,] 17 19 8
[2,] 7 19 2
[3,] 10 24 6
[4,] 6 15 11
[5,] 5 13 9
我一直在搞乱子集,合并和Reduce,但我真的没有到达任何地方。
答案 0 :(得分:5)
我们可以做到
sapply(split(seq_along(group), group), function(x) rowSums(y[, x, drop = FALSE]))
# 1 2 3
#[1,] 17 19 8
#[2,] 7 19 2
#[3,] 10 24 6
#[4,] 6 15 11
#[5,] 5 13 9
或另一个选项是rowsum
t(rowsum(t(y), group))
# 1 2 3
#[1,] 17 19 8
#[2,] 7 19 2
#[3,] 10 24 6
#[4,] 6 15 11
#[5,] 5 13 9
答案 1 :(得分:1)
以dplyr
方式:
data.frame(group = group, t(y)) %>%
group_by(group) %>%
summarise_each(funs(sum), -group) %>%
ungroup() %>%
select(-group) %>%
as.matrix() %>%
t()
细分后,我们转置y
并将其作为一个data.frame,并将group
作为单独的列。然后,我们可以自由选择每一栏的group_by&小组总结。最后四个步骤是将结果转换回您想要的格式。