#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)