Мы 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)
data
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)