我试图从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)的所有元素。
理想的解决方案将推广到更多的输入向量。
另请参阅:
6条答案
按热度按时间hc2pp10m1#
这也许就是你想要的
如果产生的顺序不是您想要的,您可以稍后再排序。如果您将参数命名为
expand.grid
,它们会变成数据行名称:并且
expand.grid
泛化为任意数量的输入列。rm5edbpk2#
tidyr
包提供了一个很好的替代函数crossing
,它比经典的expand.grid
函数运行得更好,因为(1)字符串没有转换成因子,(2)排序更直观:ljo96ir53#
r-faq概述中缺少data.table-包中的
CJ
-函数。使用:给出:
注:自版本1.12.2起,
CJ
自动命名生成的列(另请参见here和here)。aelbi1ox4#
从版本1.0.0开始,
tidyr
提供了它自己的expand.grid()
版本。它是completes the existing family ofexpand()
,nesting()
, andcrossing()
with a low-level function that works with vectors。与
base::expand.grid()
相比:以最快的速度改变第一个元素。从不将字符串转换为因子。不添加任何附加属性。返回tibble,而不是数据框。可以展开任何广义向量,包括数据框。
wgxvkvu95#
您可以使用排序函数对任意数量的列进行排序。
ffscu2ro6#
在base R中,可以尝试merge()、cbind()和expand.grid()。
输出。