Объединить матричные элементы - PullRequest
0 голосов
/ 26 октября 2018

Я хочу получить все комбинации элементов из матрицы размером m * n.

Пример примера:

1   3   5
2   6   7  

Ожидаемый результат:

2 , 1
2 , 3
2 , 5
6 , 1
6 , 3
6 , 5
7 , 1
7 , 3
7 , 5

Правила:

  1. Каждая комбинация начинается снизу матрицы и продолжается вверх. Хотя он может переключать столбцы.
  2. Каждая комбинация должна иметь количество элементов, равное количеству строк.
  3. В комбинации не может быть элемента из одной строки, представленного дважды.
  4. Количество столбцов и строк может отличаться. Таким образом, решение должно быть общим.

Я пытался сделать это, но не получил точный результат

m <- rbind(c(1, 3, 5), c(2, 6, 7))
do.call(expand.grid, split(m, rep(nrow(m):1, ncol(m))))

1 Ответ

0 голосов
/ 26 октября 2018

Есть много способов,

do.call(
    rbind,lapply(m[2,], function(x){ cbind(x, c(m[1,])) })
)

данные:

m<-
structure(c(1L, 2L, 3L, 6L, 5L, 7L), .Dim = 2:3, .Dimnames = list(
    NULL, c("V1", "V2", "V3")))

результат:

#   x  
#V1 2 1
#V2 2 3
#V3 2 5
#V1 6 1
#V2 6 3
#V3 6 5
#V1 7 1
#V2 7 3
#V3 7 5

общее решение:

do.call(
    rbind,lapply(m[nrow(m),], function(x){ cbind(x, c(m[-nrow(m),])) })
)
...