【问题标题】:Creating a combination of 2 and 3 variables from 4 or more vectors从 4 个或更多向量创建 2 和 3 个变量的组合
【发布时间】:2016-11-28 21:02:00
【问题描述】:

我正在寻找一些方向,因为我对 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 进行汇总,但如果我不知道密钥,我将无法过滤我的主数据集。例如,我需要双打就像...

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

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

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

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    我认为这会做你想要的:

    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 等长版本,这不是最优雅的,但它可以工作。

    【讨论】:

    • 是的,对不起,我稍微误读了您最初的帖子。根据对您来说最方便的结构,您可能需要重写以给出例如一个数组,其中第一列是变量名,第二列是值
    • 太棒了!工作。抱歉,我没有看到如何包含名称。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多