为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡说叔叔 2019-07-12 10:30:11
两个(或更多)向量中所有元素的唯一组合在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          b1  ABC 2012-05-012  ABC 2012-05-023  ABC 2012-05-034  ABC 2012-05-045  ABC 2012-05-056  DEF 2012-05-017  DEF 2012-05-028  DEF 2012-05-039  DEF 2012-05-0410 DEF 2012-05-0511 GHI 2012-05-0112 GHI 2012-05-0213 GHI 2012-05-0314 GHI 2012-05-0415 GHI 2012-05-05基本上,我在寻找一个独特的组合,考虑一个向量的所有元素(A)与第二个向量(B)的所有元素并置。一个理想的解决方案将推广到更多的输入向量。另见:如何生成组合矩阵
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

这也许是你想要的


> expand.grid(a,b)

   Var1       Var2

1   ABC 2012-05-01

2   DEF 2012-05-01

3   GHI 2012-05-01

4   ABC 2012-05-02

5   DEF 2012-05-02

6   GHI 2012-05-02

7   ABC 2012-05-03

8   DEF 2012-05-03

9   GHI 2012-05-03

10  ABC 2012-05-04

11  DEF 2012-05-04

12  GHI 2012-05-04

13  ABC 2012-05-05

14  DEF 2012-05-05

15  GHI 2012-05-05

如果得到的订单不是您想要的,那么您可以随后进行排序。如果您将参数命名为expand.grid,它们将成为列名:


df = expand.grid(a = a, b = b)

df[order(df$a), ]

和expand.grid概括为任意数量的输入列。


查看完整回答
反对 回复 2019-07-12
?
繁花如伊

TA贡献2012条经验 获得超12个赞

这个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

       a          b

   <chr>      <chr>

 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


查看完整回答
反对 回复 2019-07-12
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

在这里失踪r-常见问题概述是CJ-职能数据表-包裹。使用:

library(data.table)CJ(a = a, b = b, unique = TRUE)

给予:

      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-0410: DEF 2012-05-0511: GHI 2012-05-0112: GHI 2012-05-0213: GHI 2012-05-0314: GHI 2012-05-0415: GHI 2012-05-05

在未来版本中数据表你可以用:CJ(a, b, unique = TRUE)(另见这里这里).

您已经可以通过设置以下选项来利用此功能:options("datatable.CJ.names" = TRUE)


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 673 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信