从向量中创建R中的矩阵

时间:2015-05-07 04:08:02

标签: r

我在R.工作。我有一个向量A.它包含0到10之间的整数值。我想要一个10-X 0s的矩阵,然后是X 1s,其中X是来自矢量A的对应值。

示例:

A = c(1,3,5,8) 

变为

(0,0,0,0,0,0,0,0,0,1
 0,0,0,0,0,0,0,1,1,1
 0,0,0,0,0,1,1,1,1,1
 0,0,1,1,1,1,1,1,1,1)

我知道你可以使用rep函数来复制值,但它并不适用于矩阵。例如,B=c(rep(0, 10-A), rep(1,A))没有做任何事情。有这么快的方法吗?

2 个答案:

答案 0 :(得分:5)

两步替代:

N <- 10
B <- matrix(0,nrow=length(A),ncol=N)
B[cbind(rep(seq_along(A),A),N + 1 - sequence(A))] <- 1
B

#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]    0    0    0    0    0    0    0    0    0     1
#[2,]    0    0    0    0    0    0    0    1    1     1
#[3,]    0    0    0    0    0    1    1    1    1     1
#[4,]    0    0    1    1    1    1    1    1    1     1

答案 1 :(得分:3)

我希望这会变得更漂亮,但它似乎有用

N <- 10
A <- c(1,3,5,8)
matrix(
    rep(
        rep(c(0,1), length(A)), 
        rbind(N-A, A)
    ), 
    byrow=T, ncol=N
)

#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,]    0    0    0    0    0    0    0    0    0     1
# [2,]    0    0    0    0    0    0    0    1    1     1
# [3,]    0    0    0    0    0    1    1    1    1     1
# [4,]    0    0    1    1    1    1    1    1    1     1