Выберите неперекрывающиеся подматрицы по индексу в data.frame - PullRequest
0 голосов
/ 14 января 2020

Допустим, у меня есть большая матрица длиной 144.

 x <- matrix(1:144, 12, 12)

Я хочу выбрать 50% ячеек (то есть 72), но сделать это в уникальных подматрицах 2 * 2. Таким образом, всего 18 2 * 2 матриц.

Индексы для каждого элемента в матрицах находятся в векторе, таком как

indices <- 1:144

Я знаю, как выбрать группы из 4 ячеек из индексов но мой выбор выбирает подматрицы 1 * 4, т.е.

groups <- rep(1:36, each = 4)
rando_groups <- sample(unique(groups), 18)
df <- data.frame(indices = indices, groups = groups)
sub_mats <- df$indices[df$groups %in% rando_groups]
# 18 sub matrices size of 1*4

Как я могу определить правильные индексы для выбора для 2 * 2 подматриц?

1 Ответ

2 голосов
/ 14 января 2020

Вы можете использовать slice.index для получения неперекрывающихся подматриц 2 * 2 .

x <- matrix(1:144, 12, 12)
nbyn <- 2
groups <- (slice.index(x, 1) - 1) %/% nbyn * nrow(x) / nbyn + (slice.index(x, 2) + nbyn - 1) %/% nbyn
rando_groups <- sample(unique(c(groups)), 18)

which(groups %in% rando_groups)  #Gives you the indices
x[groups %in% rando_groups]      #Gives you the values
groups[groups %in% rando_groups] #Gives you the group
groups %in% rando_groups         #Gives you a matrix of the selected regions
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...