0

我正在尝试在 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 之前使用相同的模式。有人可以帮我吗?提前致谢。

4

3 回答 3

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))它是一个带有N1 的向量,每个向量用N0 分隔。使用 diag(3) 的示例,each=2,ncol=3 与上面的示例相同。

于 2013-03-07T03:31:00.820 回答
1

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

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)
于 2013-03-07T04:11:53.267 回答
1

以及来自的class.ind方法nnet

class.ind(rep(factor(1:3),each=2))
于 2013-03-07T04:15:57.447 回答