我正在寻找一些方向,因为我对 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/