如何根据条件为每个行获取二进制矩阵

时间:2017-10-25 20:38:54

标签: r

我有一个整数向量。我需要构造一个依赖于这个向量的二进制矩阵。事实上,我想得到矩阵零的每一行只是它的索引相等的列 到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

所以我运行此代码,但我没有得到下面显示的结果:

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

感谢您的帮助!

2 个答案:

答案 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

答案 1 :(得分: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