将字符串转换为在R中包含1到长度(字符串)元素的唯一排列列表
我尝试将一个字符串拆分为组成该字符串的唯一字符排列将字符串转换为在R中包含1到长度(字符串)元素的唯一排列列表,r,string,dataframe,permutation,R,String,Dataframe,Permutation,我尝试将一个字符串拆分为组成该字符串的唯一字符排列 strings <- c("DOG", "CAT", "BALL") string length output DOG 3 D, O, G, DO, DG, OG, DOG CAT 3 C, A, T, CA, CT, AT, CAT BALL 4 B, A, L, BA, BL, BAL string
strings <- c("DOG", "CAT", "BALL")
string length output
DOG 3 D, O, G, DO, DG, OG, DOG
CAT 3 C, A, T, CA, CT, AT, CAT
BALL 4 B, A, L, BA, BL, BAL
strings这里是一个基本的R方法。使用strsplit
将每个字符串拆分为单个(和唯一)字母。然后,对于每组字母,使用seq_-along
从1到字符串长度,并使用combn
查看字母组合。结果被放入每个组合的列表中,然后粘贴在一起
strings <- c("DOG", "CAT", "BALL")
data.frame(
string = strings,
length = nchar(strings),
output = sapply(strings,
function(s) {
x <- unique(strsplit(s, "")[[1]])
toString(
paste(
sapply(
do.call("c", lapply(seq_along(x), function(i) combn(x, i, list))),
paste,
collapse = "")
)
)
}
),
row.names = NULL)
你可以做:
fun <- function(x){
y <- unique(strsplit(x, "")[[1]])
toString(unlist(sapply(seq(y), combn, x = y, paste0, collapse = "")))
}
data.frame(strings, length=nchar(strings), output=sapply(strings,fun,USE.NAMES = FALSE))
strings length output
1 DOG 3 D, O, G, DO, DG, OG, DOG
2 CAT 3 C, A, T, CA, CT, AT, CAT
3 BALL 4 B, A, L, BA, BL, AL, BAL
fun您是否只使用唯一值?如果你有像“妈妈”这样的东西会怎么样?结果会是什么?会是妈妈!
fun <- function(x){
y <- unique(strsplit(x, "")[[1]])
toString(unlist(sapply(seq(y), combn, x = y, paste0, collapse = "")))
}
data.frame(strings, length=nchar(strings), output=sapply(strings,fun,USE.NAMES = FALSE))
strings length output
1 DOG 3 D, O, G, DO, DG, OG, DOG
2 CAT 3 C, A, T, CA, CT, AT, CAT
3 BALL 4 B, A, L, BA, BL, AL, BAL