Все возможные комбинации матриц со значениями из векторов

#r #matrix #vector #combinations

#r #матрица #вектор #комбинации

Вопрос:

Как получить все возможные матрицы 2 by v, где v — количество векторов произвольной длины, заполненных значениями вектора.

Например, я получил три вектора A = c(1,2,3) B = c("x","z") C = c(1,0) .

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

В конце концов, я хотел бы иметь что-то вроде этого:

        combination_id first_row A B C
    1:              1         1 0 x 0
    2:              2         0 1 x 1
    3:              3         1 1 z 0
    4:              4         0 0 z 1
    5:              5         1 0 x 0
    6:              6         0 1 x 0
    7:              :               
    8:              :               
  

Комментарии:

1. развернуть.grid(A,B, C)?

2. каковы x и z в желаемом выводе (столбец B)? потому что они не находятся в 3 векторах A, B, C

3. извините, просто опечатка

4. с помощью expand.grid я получаю все 12 комбинаций, но мне нужны 12 ^ 2 комбинации, каждая из которых представляет собой, например, 2-строчную матрицу. Итак, в основном expand.grid (A, B, C, A,B, C), но не в широком формате

Ответ №1:

Это дает все возможные комбинации двух элементов из каждого набора (где допускается замена), давая в общей сложности 144 матрицы. Затем они связываются вместе, чтобы получить единый фрейм данных из 288 строк:

 A = c(1,2,3) 
B = c("x","z") 
C = c(1,0)

df <- setNames(as.data.frame(do.call(rbind, 
      lapply(as.data.frame(t(expand.grid(A, B, C, A, B, C))), 
             matrix, nrow = 2, byrow = TRUE))), 
      c("A", "B", "C"))

head(df)
#>   A B C
#> 1 1 x 1
#> 2 1 x 1
#> 3 2 x 1
#> 4 1 x 1
#> 5 3 x 1
#> 6 1 x 1

nrow(df)
#> [1] 288
  

Создано 2020-09-06 пакетом reprex (версия 0.3.0)