【发布时间】:2014-08-12 18:17:33
【问题描述】:
我有一个有趣的挑战:我正在尝试从一个整数向量构造一个二进制矩阵。二进制矩阵应包含与向量长度一样多的行,以及与整数向量中的最大值一样多的列。矩阵中的第 i 行将对应于向量的第 i 个元素,该行在位置 j 处包含 1,其中 j 等于向量的第 i 个元素的值;否则,该行包含零。如果第 i 个整数的值为 0,那么整个第 i 行应该是 0。
为了让这一切变得更简单,这里有一个可重复的工作示例:
set.seed(1)
playv<-sample(0:5,20,replace=TRUE)#sample integer vector
playmat<-matrix(playv,nrow=length(playv),ncol=max(playv))#create matrix from vector
for (i in 1:length(playv)){
pos<-as.integer(playmat[i,1])
playmat[i,pos]<-1
playmat[i,-pos]<-0}
head(playmat)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 0 1 0 0 0
[3,] 0 0 1 0 0
[4,] 0 0 0 0 1
[5,] 1 0 0 0 0
[6,] 0 0 0 0 1
上面的解决方案是正确的,我只是想让一些东西更健壮。
【问题讨论】:
-
您在寻找
model.matrix吗? -
t(sapply(playv, function(i) {if (i!=0) {c(rep(0, i-1), 1, rep(0,max(playv)-i))} else rep(0, max(playv))}))