我当前的数据是一系列3x3 matrices
,彼此堆叠在一起。结构如下所示(以下示例为3 matrices
,尽管我的实际数据更大/更长):
0 1 1
0 0 1
1 1 0
0 1 1
1 0 1
1 0 0
0 1 1
0 0 1
1 1 0
使用R
,我希望它看起来像这样:
0 1 1
0 0 1
1 1 0
0 1 1
1 0 1
1 0 0
0 1 1
0 0 1
1 1 0
答案 0 :(得分:2)
我们使用split
创建的分组索引matrix
list
到gl
个矩阵并应用bdiag
(来自Matrix
)得到块对角稀疏矩阵
library(Matrix)
m2 <- bdiag(lapply(split(d1, as.integer(gl(nrow(d1), 3, nrow(d1)))), as.matrix))
m2
#9 x 9 sparse Matrix of class "dgCMatrix"
#
# [1,] . 1 1 . . . . . .
# [2,] . . 1 . . . . . .
# [3,] 1 1 . . . . . . .
# [4,] . . . . 1 1 . . .
# [5,] . . . 1 . 1 . . .
# [6,] . . . 1 . . . . .
# [7,] . . . . . . . 1 1
# [8,] . . . . . . . . 1
# [9,] . . . . . . 1 1 .
可以通过包裹as.matrix
as.matrix(m2)
m1 <- structure(c(0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0,
1, 1, 1, 0, 1, 1, 0, 1, 1, 0), .Dim = c(9L, 3L))
d1 <- as.data.frame(m1)
答案 1 :(得分:1)
您可以将split
与变量一起使用,该变量将每组3行分组。
split(as.data.frame(mat), ceiling(seq_len(nrow(mat) / 3)))
数据:
mat <- matrix(sample(0:1, 9*3, replace=TRUE), ncol=3)