2017-06-14 11 views
7

別個のベクターにインデックスの値に基づいて列をマージ:は私はこのようなマトリックスを有する

> 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 

私はサブセット、マージ、リデュースを使いこなしてきましたが、実際にはどこにもいません。

答えて

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

私が必要としていたものとまったく同じです。 – smiley

1

ここdplyr方法ですされています

data.frame(group = group, t(y)) %>% 
    group_by(group) %>% 
    summarise_each(funs(sum), -group) %>% 
    ungroup() %>% 
    select(-group) %>% 
    as.matrix() %>% 
    t() 

が故障し、我々はを転置しますとし、別の列としてgroupのdata.frameにします。それから、グループの各列のgroup_by &を自由に取ることができます。最後の4つのステップは、結果を目的のフォーマットに変換することです。

関連する問題