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

标签 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 进行摘要,但如果我不知道 key ,我将无法过滤我的主数据集。例如,我需要 double 像...

("types:A", "market:small")

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

是否有可能使用 R 来实现这个(创建所有这些命名组合)?

最佳答案

我认为这会做你想要的:

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() 返回相关对象并提供给 expand.grid()。如果您想要所有 4 和 5 等长版本,它不是最优雅的,但它可以工作。

关于r - 从 4 个或更多向量创建 2 个和 3 个变量的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40853403/

相关文章:

r - 是否可以使用 readr 中的 write_csv() 写入标准输出?

r - 带有 Shiny 的 R Leaflet 中的图标未加载(空图像)

python - 生成一个随机的 3 元素 Numpy 整数数组,总和为 3

c++ - 提取所有可能的有序子集

algorithm - 从多个列表的元素中找出 (100) 个最高总和

R 将 colname 作为循环中的变量传递给 glht 函数

删除位于 r 中另一个 data.frame 中的 data.frame 的确切行和行的频率

r - 总结 data.table - 在 R 中按日期创建多列子集

c - C中字母表排序组合的多线程计算

algorithm - 由二维数组算法优化组成最大和行解