Создать все возможные комбинации из 2 векторов

#r #vba #combinatorics

#r #vba #комбинаторика

Вопрос:

У меня есть текстовый файл со списком соседей, структурированный следующим образом:

 UG   Neigh
6    7
6    504
6    508
6    514
9    11
9    14
10   352

...  ...
  

И мне нужно создать список всех возможных комбинаций Neigh для каждого UG.
Пример:

 6-7
6-504
6-508
6-514
6-7-504
6-7-508
6-7-514
6-504-508
6-504-514
6-508-514
6-7-504-508
9-11
9-14
9-11-14
...
  

Ответ №1:

Мы можем использовать expand.grid

 do.call(paste, c(expand.grid(df1), sep="-"))
  

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

1. Спасибо за совет. Я попробую

Ответ №2:

Вы можете сделать это, используя CJ функцию из data.table пакета-

 library(data.table)
dt <- CJ(UG = dt$UG, Neigh = dt$Neigh, unique = TRUE)
setDT(dt)[, final:=paste0(UG,"-",Neigh)]
  

Пример данных-

 dt <- read.table(text="UG   Neigh
6    7
6    504
6    508
6    514
9    11
9    14
10   352",header=T)
  

Вывод

     UG Neigh  final
 1:  6     7    6-7
 2:  6    11   6-11
 3:  6    14   6-14
 4:  6   352  6-352
 5:  6   504  6-504
 6:  6   508  6-508
 7:  6   514  6-514
 8:  9     7    9-7
 9:  9    11   9-11
10:  9    14   9-14
11:  9   352  9-352
12:  9   504  9-504
13:  9   508  9-508
14:  9   514  9-514
15: 10     7   10-7
16: 10    11  10-11
17: 10    14  10-14
18: 10   352 10-352
19: 10   504 10-504
20: 10   508 10-508
21: 10   514 10-514
  

Примечание — Вы также можете указать уникальные комбинации с помощью unique параметра.

Вы также можете использовать crossing from tidyr package

 > do.call(paste,crossing(dt$UG, dt$Neigh, sep="-"))