我正在尝试在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。有人可以帮我吗?提前谢谢。
答案 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))