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