独特的字符串组合

时间:2015-04-01 09:42:49

标签: r vector unique combinations

我有一个包含某些单词的向量

colors<-c("Yellow","Blue","Red")

> colors
[1] "Yellow" "Blue"   "Red" 

现在我想创建一个新变量 colorsCombined ,其中包含原始向量以及这些单词的所有可能组合。

> colorsCombined
[1] "Yellow", "Blue", "Red", "YellowBlue", "YellowRed", "BlueRed", "YellowBlueRed"

我认为YellowBlue与BlueYellow相同。

我该怎么做?

1 个答案:

答案 0 :(得分:9)

一种选择是在combn循环中运行lapply函数。您可以将其定义为您自己的功能

allCombs <- function(x) c(x, lapply(seq_along(x)[-1L], 
                             function(y) combn(x, y, paste0, collapse = "")),
                             recursive = TRUE)

allCombs(colors)
## [1] "Yellow" "Blue" "Red" "YellowBlue" "YellowRed" "BlueRed" "YellowBlueRed"

解释(按要求)

基本上OP需要所有可能组合的矢量(排列),具体取决于输入矢量的长度。因此,我们应该在combn上运行k <- 1:length(x)函数,并为每个k生成所有组合。 因此,当k == 1时,它只是原始向量,因此我们可以跳过该部分,只使用c连接原始向量。其余生成的组合返回不同长度的向量列表(由于显而易见的原因,按降序排列),因此我们需要在recursive = TRUE函数中使用c以模仿{的行为{1}}并将结果合并到一个矢量中。