У меня есть такая матрица:
mat<- matrix(c(1,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,
2,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,
0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,0,0,1,0,1,1,0,0,1,0,1,
1,1,0,0,0,0,0,0,1,0,1,2,1,0,0,0), nrow=16, ncol=6)
dimnames(mat)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"),
c("1", "2", "3", "4", "5", "6"))
Я хочу сгруппировать столбцы или столбцы, а затем объединить данные для каждой группы.Повторите выборку для корзины размером x, n раз.Этот процесс будет повторяться для размеров бинов х + 1.
Для первой итерации два случайных столбца сгруппированы.Я хотел бы сделать выборку без замены, чтобы комбинация из двух столбцов не выбиралась дважды (однако столбец можно использовать дважды, если он связан с другим столбцом).Агрегация определяется как вычисление сумм строк для столбцов с столбцами.Агрегированные результаты будут добавлены в виде нового столбца в матрицу результатов для этого размера ячейки.Количество столбцов в матрице результатов будет ограничено количеством случайно выбранных бинов.
Размер корзины продолжает увеличиваться.Для следующей итерации размер ячейки увеличивается до 3, так что объединяются 3 случайно выбранных столбца.Агрегированные данные будут помещены в другую матрицу результатов.Этот процесс будет продолжаться до тех пор, пока размер бина не станет равным размеру фрейма данных, и в этом случае повторная выборка невозможна.Все матрицы результатов будут помещены в список матриц.
Ниже приведен ожидаемый результат resultList
для первых двух размеров бинов с учетом приведенной выше матрицы.
# Bin size =2
# The randomly sampled columns are columns 1&2, 2&3, 3&4, 4&5, 5&6.
mat1<- matrix( c(3,0,0,0,1,0,1,0,0,0,0,0,0,0,2,0,
2,0,1,1,2,0,0,0,0,0,0,0,0,0,1,0,
0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,1,1,0,1,0,1,1,0,0,1,0,1,
1,1,0,0,1,0,0,1,1,1,2,2,1,1,0,1), nrow=16)
dimnames(mat1)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"),
c("1_2", "2_3", "3_4", "4_5", "5_6"))
# Bin size= 3
# The randomly selected columns to be joined are columns 1,2&3,
# 2,3&4, 3,4&5, 4,5&6.
mat3<- matrix( c(3,0,1,1,2,0,1,0,0,0,0,0,0,0,3,0,
2,1,1,1,2,1,0,0,0,0,0,0,0,0,1,0,
0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,
1,2,0,0,1,1,0,1,1,1,2,2,1,1,0,1), nrow=16)
dimnames(mat8)<- list(c("a", "c", "f", "h", "i", "j", "l", "m", "p", "q", "s", "t", "u", "v","x", "z"),
c("1_2_3", "2_3_4", "3_4_5", "4_5_6"))
resultList<-list(mat1, mat2)
Я разместил аналогичный вопрос для альтернативного метода биннинга здесь: Столбцы бинов и агрегированные данные с использованием случайной выборки с заменой для итеративно больших размеров бинов
Здесьмоя попытка сгруппировать случайно выбранные столбцы и поместить результаты для каждого размера бина в список матриц.Я попытался выбрать j
случайные столбцы, используя sample
, сделать rowSums
и удалить выбранные j
парные столбцы, чтобы они не повторялись в следующей итерации:
lapply(seq_len(ncol(mat) - 1), function(j) do.call(cbind,
lapply(sample(ncol(mat) - j, size= ), function(i) rowSums(mat[, i:(i - j)]))))