使用移动组标识符创建矩阵

时间:2013-03-07 03:28:26

标签: r matrix

我正在尝试在R中创建一个包含180*12行和12列的矩阵。我不确定R的具体代码是什么来创建这样的东西。

Column 1: 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,..................0
Column 2: 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,..................0
Column 3: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,..................0

等。使用相同的模式,直到Column12。有人可以帮我吗?提前谢谢。

3 个答案:

答案 0 :(得分:3)

apply(diag(12), 2, rep, each=12)

一个较短的例子:

apply(diag(3), 2, rep, each=2)
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    1    0    0
## [3,]    0    1    0
## [4,]    0    1    0
## [5,]    0    0    1
## [6,]    0    0    1

另一个非常类似的解决方案,没有明确的apply

matrix(rep(diag(12), each=12), ncol=12)

这是有效的,因为as.vector(diag(N))是一个N 1的向量,每个向量由N 0'分隔。 diag(3)的例子,每个= 2,ncol = 3与上面的例子相同。

答案 1 :(得分:1)

只是为了笑,这是@ MatthewLundberg答案的model.matrix版本:

model.matrix( ~ rep(factor(1:3),each=2) - 1)

a <- rep(factor(1:3),each=2)
model.matrix( ~ a - 1)

  a1 a2 a3
1  1  0  0
2  1  0  0
3  0  1  0
4  0  1  0
5  0  0  1
6  0  0  1
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$a
[1] "contr.treatment"

或全部在一行:

model.matrix( ~ rep(factor(1:3),each=2) - 1)

答案 2 :(得分:1)

来自class.ind

nnet方法
class.ind(rep(factor(1:3),each=2))