从4个或更多向量创建2个和3个变量的组合

时间:2016-11-28 21:02:01

标签: r combinations

我正在寻找一些方向,因为我对R很新。任何帮助都将不胜感激。

我有以下向量:

> types <- c("A", "B", "C", "D", "E")
> regions <- c("Atlantic", "Central", "Western")
> categories <- c("AA", "AB", "MN", "XY")
> market <- c("Small", "Medium", "Large")

我正在尝试计算这些向量中所有值组合的YOY(逐年)值。组合可以是双倍或三倍。以下是一些例子......

("A", "Atlantic", "AA")
("A", "Atlantic", "Small")
("A", "AB", "Small")
...
("A", "Small")
("B", "Western")

我打算使用dplyr进行汇总,但如果我不知道密钥,我将无法过滤我的主数据集。例如,我需要双打... ...

  

(“类型:A”,“市场:小”)

这样我就可以使用strsplit()来获取变量名。

甚至可以使用R来实现 this (创建所有这些命名组合)?

1 个答案:

答案 0 :(得分:2)

我认为这会做你想做的事情:

combos2 <- combn(c('types', 'regions', 'categories', 'market'), 2)
combos3 <- combn(c('types', 'regions', 'categories', 'market'), 3)

c(unlist(apply(combos2, 2, function(x) apply(expand.grid(get(x[1]), get(x[2])), 1, paste, collapse=':'))),
  unlist(apply(combos3, 2, function(x) apply(expand.grid(get(x[1]), get(x[2]), get(x[3])), 1, paste, collapse=':'))))

因此可以实现包括名称(甚至不那么优雅):

c(unlist(apply(combos2, 2, function(x) apply(expand.grid(get(x[1]), get(x[2])), 1, function(y) paste(x[1],y[1],x[2],y[2], sep=':')))),
  unlist(apply(combos3, 2, function(x) apply(expand.grid(get(x[1]), get(x[2]), get(x[3])), 1, function(y) paste(x[1],y[1],x[2],y[2],x[3],y[3], sep=':')))))

这为您提供了所有两种和三种组合,使用get()返回相关对象并将Feed提供给expand.grid()。如果你想要所有4和5等长版本,它不是最优雅的,但是它可以工作。