У меня вопрос с разделительными матрицами.
У меня есть данные из 100 строк и 1024 столбца. Я хочу разбить эту матрицу на 2 подматрицы, чтобы 8 строк в матрице 1 и 2 строки в матрице 2
будет сформирована первая матрица
r1
r2
r3
r4
r5
r6
r7
r8
r11
r12
r13
...
...
и вторая матрица будет сформирована с
r9
r10
r19
r20
...
...
Один из вариантов — создать логический индекс с помощью rep
, а затем использовать его для split
последовательности строк matrix
, подмножества matrix
на основе индексного вектора в list
out <-lapply(split(seq_len(nrow(m1)), rep(rep(c(TRUE, FALSE), c(8, 2)),
length.out = nrow(m1))), function(i) m1[i, ] )
Кроме того, как упомянул @user20650 в комментариях, ?split.data.frame
можно использовать и в матрицах (на основе документации)
The data frame method can also be used to split a matrix into a list of matrices, and the replacement form likewise, provided they are invoked explicitly.
out1 <- split.data.frame(m1, rep(rep(c(TRUE, FALSE), c(8, 2)),
length.out = nrow(m1)))
set.seed(24)
m1 <- matrix(rnorm(100 * 1024), nrow = 100, ncol = 1024)
он работает и намного быстрее, чем мой цикл for, но у меня есть последний вопрос; есть ли способ сформировать «внешнюю» матрицу без заголовка?
@Erdem Вы имели в виду имена столбцов каждой матрицы?
Вероятно, самый простой способ — определить индексы, а затем подмножить матрицу:
idx10 <- 1:10*10 # contains 10, 20, 30, ..., 100
idx9 <- idx10 - 1 #contain 9, 19, 29, ..., 99
idx <- c(idx9, idx10)
a <- matrix(rnorm(200), nrow = 100)
a_910 <- a[idx,]
a_rest <- a[-idx]
@user20650 user20650 Это хорошо, я думал о
split
.default`, а потом подумал, что мне нужно преобразовать матрицу в data.frame, чтобы сделать это