在单独的向量中基于索引处的值合并列

时间:2017-06-14 11:58:56

标签: r

我有一个像这样的矩阵:

> 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,但我真的没有到达任何地方。

2 个答案:

答案 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&小组总结。最后四个步骤是将结果转换回您想要的格式。