Разделение строки матрицы на основе - PullRequest
1 голос
/ 07 апреля 2019

У меня вопрос с разделительными матрицами.

У меня есть данные из 100 строк и 1024 столбцов.Я хочу разбить эту матрицу на 2 подматрицы так, чтобы 8 строк в матрицу 1 и 2 строки в матрицу 2

была сформирована первая матрица

r1
r2
r3
r4
r5
r6
r7
r8
r11
r12
r13
...
...

, а вторая матрица была сформированас

r9
r10
r19
r20
...
...

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Один из вариантов - создать логический индекс с 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 можно использовать и с матрицами (на основе документации)

Метод фрейма данных также можно использовать для разбиения матрицы на список матриц и форму замены, при условии, что они вызываются явно.

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)
1 голос
/ 07 апреля 2019

Вероятно, самый простой способ - это определить индексы, а затем поднастроить матрицу:

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]
...