2017-10-25 8 views
0

私は整数のベクトルを持っています。そして、このベクトルに依存する2進行列を構築する必要があります。実際には、行列0の各行インデックスが に等しい列をw値に設定します。 これは一例です:どのように各行に条件に応じたバイナリ行列を得る

w=c(2,3,5,4) 
nr=length(w) 
M=matrix(1*nr*length(w),nrow=nr,ncol=max(w)) 

結果は、この例のためにそのようにする必要があります:

01000 
00100 
00001 
00010 

ので、私はこのコードを実行するが、私は結果がbelown示されませんでした:

for (i in 1:nr) 
{ 
for(j in 1:max(w)) 
{ if(w[j]==j) 
    M[i,j]=1 
else 
    M[i,j]=0 
} 
} 

助けてくれてありがとう!

+1

するこれらの細胞を置き換えることができますコード。また、 'vector'や 'matrix'のようなタグを追加すると、より視認性が向上します。ようこそ! – cakes88

答えて

1

我々はすべて0で行列を作成し、あなたがそれを取得している結果を追加するために役に立つかもしれません。1.

w <- c(2, 3, 5, 4) 
nr <- length(w) 
M <- matrix(0, nrow = nr, ncol = max(w)) 

for (i in 1:nr){ 
    M[i, w[i]] <- 1 
} 

M 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 0 1 0 0 0 
[2,] 0 0 1 0 0 
[3,] 0 0 0 0 1 
[4,] 0 0 0 1 0 
2

これを試してみてください:

`[<-`(matrix(0,nrow=length(w),ncol=max(w)),cbind(seq_along(w),w),1) 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 0 1 0 0 0 
#[2,] 0 0 1 0 0 
#[3,] 0 0 0 0 1 
#[4,] 0 0 0 1 0 
関連する問題