独特的字符串组合
Unique string combinations
我有一个包含特定单词的向量
colors<-c("Yellow","Blue","Red")
> colors
[1] "Yellow" "Blue" "Red"
现在我想创建一个新变量,colorsCombined,其中存在原始向量以及这些词的所有可能组合。
> colorsCombined
[1] "Yellow", "Blue", "Red", "YellowBlue", "YellowRed", "BlueRed", "YellowBlueRed"
我认为 YellowBlue 与 BlueYellow 相同。
我该怎么做?
一个选项是 运行 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
连接原始向量。其余生成的组合 return 具有不同长度的向量列表(出于明显的原因按降序排列),因此我们需要在 c
函数中使用 recursive = TRUE
以模仿unlist
的行为并将结果组合成一个向量。
我有一个包含特定单词的向量
colors<-c("Yellow","Blue","Red")
> colors
[1] "Yellow" "Blue" "Red"
现在我想创建一个新变量,colorsCombined,其中存在原始向量以及这些词的所有可能组合。
> colorsCombined
[1] "Yellow", "Blue", "Red", "YellowBlue", "YellowRed", "BlueRed", "YellowBlueRed"
我认为 YellowBlue 与 BlueYellow 相同。
我该怎么做?
一个选项是 运行 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
连接原始向量。其余生成的组合 return 具有不同长度的向量列表(出于明显的原因按降序排列),因此我们需要在 c
函数中使用 recursive = TRUE
以模仿unlist
的行为并将结果组合成一个向量。