2017-04-14 12 views
1

行列の各行(たとえばm1)を別の行列(m2)の各要素に連結したいと考えています。ここでexmpleを、次のとおりです。行列の各行を別の行列の各要素に連結するR

m1 <- t(combn(4,2)) 
m2 <- matrix(NA,nrow(m1),2) 
for(i in 1:nrow(m1)){ 
    m2[i,] <- seq(1,4,1)[-c(m1[i,])] 
    } 
> m1 
    [,1] [,2] 
[1,] 1 2 
[2,] 1 3 
[3,] 1 4 
[4,] 2 3 
[5,] 2 4 
[6,] 3 4 

> m2 
    [,1] [,2] 
[1,] 3 4 
[2,] 2 4 
[3,] 2 3 
[4,] 1 4 
[5,] 1 3 
[6,] 1 2 

私が欲しい行列は次のようにする必要があります:

> m3 
     [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 1 2 4 
[3,] 1 3 2 
[4,] 1 3 4 
[5,] 1 4 2 
[6,] 1 4 3 
[7,] 2 3 1 
[8,] 2 3 4 
[9,] 2 4 1 
[10,] 2 4 3 
[11,] 3 4 1 
[12,] 3 4 2 

この場合のベストプラクティスは何ですか?

答えて

3

期待される出力に従って、論理は、第2のデータセットも含むことによって第1のデータセットの行を拡張しているように見えるので、行の数は最初のものの2倍にする必要があります。現在のアプローチでは、我々は二つの行列は、同じ数の列を持っていない場合でも、これは完璧に動作二matrix

cbind(m1[rep(1:nrow(m1), each = 2),], c(t(m2))) 
#  [,1] [,2] [,3] 
# [1,] 1 2 3 
# [2,] 1 2 4 
# [3,] 1 3 2 
# [4,] 1 3 4 
# [5,] 1 4 2 
# [6,] 1 4 3 
# [7,] 2 3 1 
# [8,] 2 3 4 
# [9,] 2 4 1 
#[10,] 2 4 3 
#[11,] 3 4 1 
#[12,] 3 4 2 
+1

から作成vectorで、その後cbindを行を展開するrepを使用して、各オプションが意志後者の問題に対応する。ありがとう。 –

関連する問題