从2个向量创建所有可能的组合

时间:2019-04-12 14:38:55

标签: r vba combinatorics

我有一个txt文件,其中包含如下所示的邻居列表:

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

...  ...

我需要为每个UG创建Neigh的所有可能组合的列表。 示例:

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
...

2 个答案:

答案 0 :(得分:3)

我们可以使用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包中的tidyr

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