我有一个包含某些单词的向量
colors<-c("Yellow","Blue","Red")
> colors
[1] "Yellow" "Blue" "Red"
现在我想创建一个新变量 colorsCombined ,其中包含原始向量以及这些单词的所有可能组合。
> colorsCombined
[1] "Yellow", "Blue", "Red", "YellowBlue", "YellowRed", "BlueRed", "YellowBlueRed"
我认为YellowBlue与BlueYellow相同。
我该怎么做?
答案 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}}并将结果合并到一个矢量中。