两个(或更多)向量中所有元素的唯一组合

两个(或更多)向量中所有元素的唯一组合

在R中,我试图从两个不同大小的向量中创建一个所有元素的独特组合。


例如,第一个向量是


> a <- c("ABC", "DEF", "GHI")

第二个是当前存储为字符串的日期。


> b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05")

我需要创建一个有两列的数据框架,如下所示


> data

    a          b

1  ABC 2012-05-01

2  ABC 2012-05-02

3  ABC 2012-05-03

4  ABC 2012-05-04

5  ABC 2012-05-05

6  DEF 2012-05-01

7  DEF 2012-05-02

8  DEF 2012-05-03

9  DEF 2012-05-04

10 DEF 2012-05-05

11 GHI 2012-05-01

12 GHI 2012-05-02

13 GHI 2012-05-03

14 GHI 2012-05-04

15 GHI 2012-05-05

基本上,我在寻找一个独特的组合,考虑一个向量的所有元素(A)与第二个向量(B)的所有元素并置。


一个理想的解决方案将推广到更多的输入向量。


另见:
如何生成组合矩阵


胡说叔叔
浏览 675回答 3
3回答

慕盖茨4494581

这也许是你想要的> expand.grid(a,b)&nbsp; &nbsp;Var1&nbsp; &nbsp; &nbsp; &nbsp;Var21&nbsp; &nbsp;ABC 2012-05-012&nbsp; &nbsp;DEF 2012-05-013&nbsp; &nbsp;GHI 2012-05-014&nbsp; &nbsp;ABC 2012-05-025&nbsp; &nbsp;DEF 2012-05-026&nbsp; &nbsp;GHI 2012-05-027&nbsp; &nbsp;ABC 2012-05-038&nbsp; &nbsp;DEF 2012-05-039&nbsp; &nbsp;GHI 2012-05-0310&nbsp; ABC 2012-05-0411&nbsp; DEF 2012-05-0412&nbsp; GHI 2012-05-0413&nbsp; ABC 2012-05-0514&nbsp; DEF 2012-05-0515&nbsp; GHI 2012-05-05如果得到的订单不是您想要的,那么您可以随后进行排序。如果您将参数命名为expand.grid,它们将成为列名:df = expand.grid(a = a, b = b)df[order(df$a), ]和expand.grid概括为任意数量的输入列。

繁花如伊

这个tidyr软件包提供了一个不错的选择crossing,这比经典的要好得多。expand.grid函数,因为(1)字符串没有转换为因子,(2)排序更直观:library(tidyr)a <- c("ABC", "DEF", "GHI")b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05")crossing(a, b)# A tibble: 15 x 2&nbsp; &nbsp; &nbsp; &nbsp;a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b&nbsp; &nbsp;<chr>&nbsp; &nbsp; &nbsp; <chr>&nbsp;1&nbsp; &nbsp;ABC 2012-05-01&nbsp;2&nbsp; &nbsp;ABC 2012-05-02&nbsp;3&nbsp; &nbsp;ABC 2012-05-03&nbsp;4&nbsp; &nbsp;ABC 2012-05-04&nbsp;5&nbsp; &nbsp;ABC 2012-05-05&nbsp;6&nbsp; &nbsp;DEF 2012-05-01&nbsp;7&nbsp; &nbsp;DEF 2012-05-02&nbsp;8&nbsp; &nbsp;DEF 2012-05-03&nbsp;9&nbsp; &nbsp;DEF 2012-05-0410&nbsp; &nbsp;DEF 2012-05-0511&nbsp; &nbsp;GHI 2012-05-0112&nbsp; &nbsp;GHI 2012-05-0213&nbsp; &nbsp;GHI 2012-05-0314&nbsp; &nbsp;GHI 2012-05-0415&nbsp; &nbsp;GHI 2012-05-05

叮当猫咪

在这里失踪r-常见问题概述是CJ-职能数据表-包裹。使用:library(data.table)CJ(a&nbsp;=&nbsp;a,&nbsp;b&nbsp;=&nbsp;b,&nbsp;unique&nbsp;=&nbsp;TRUE)给予:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;1:&nbsp;ABC&nbsp;2012-05-01 &nbsp;2:&nbsp;ABC&nbsp;2012-05-02 &nbsp;3:&nbsp;ABC&nbsp;2012-05-03 &nbsp;4:&nbsp;ABC&nbsp;2012-05-04 &nbsp;5:&nbsp;ABC&nbsp;2012-05-05 &nbsp;6:&nbsp;DEF&nbsp;2012-05-01 &nbsp;7:&nbsp;DEF&nbsp;2012-05-02 &nbsp;8:&nbsp;DEF&nbsp;2012-05-03 &nbsp;9:&nbsp;DEF&nbsp;2012-05-0410:&nbsp;DEF&nbsp;2012-05-0511:&nbsp;GHI&nbsp;2012-05-0112:&nbsp;GHI&nbsp;2012-05-0213:&nbsp;GHI&nbsp;2012-05-0314:&nbsp;GHI&nbsp;2012-05-0415:&nbsp;GHI&nbsp;2012-05-05在未来版本中数据表你可以用:CJ(a, b, unique = TRUE)(另见这里和这里).您已经可以通过设置以下选项来利用此功能:options("datatable.CJ.names" = TRUE)
打开App,查看更多内容
随时随地看视频慕课网APP