"multiply" 字符串中单个字符的 R 函数吗?

Is the an R function to "multiply" individual characters in a string?

string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH)

string1 string2 output

AB      E       AE, BE
CD      GH      CG, CH, DG, DH
EF              E, F

对于第 1 行,它可以是 A 和 B,但绝不能是 A 和 B 与 E。

这是我目前拥有的:

唯一(strsplit(x,“”))

[[1]]
[1] "A" "B"

[[2]]
[1] "E"

我也知道我必须使用 combn() 函数,但我不确定如何使用。

""分割两个字符串后,用Map循环相应的元素,用outer创建一个matrix的组合,同时指定FUN 作为 paste 连接单个元素,unlist listpaste 将字符串向量转换为单个字符串 (toString) 后输出并创建一个 data.frame,其中字符串和输出为列

output <- unlist(Map(function(x, y) toString(sort(c(outer(x, 
    if(length(y) == 0) "" else y, FUN = paste0)))), 
        strsplit(string1, ""), strsplit(string2, "")))

data.frame(string1, string2, output)
#  string1 string2         output
#1      AB       E         AE, BE
#2      CD      GH CG, CH, DG, DH
#3      EF                   E, F

注意:if 确保如果字符串只有空白 ("") 元素,它不会 return character(0)


如果超过2个字符串,使用expand.grid

library(dplyr)
library(purrr)
output <-  mget(ls(pattern = "^string\d+$")) %>% 
    transpose %>% 
    map_chr(~ {
       x1 <- strsplit(unlist(.), "")
       x1[lengths(x1) == 0] <- ''
       expand.grid(x1) %>% 
           invoke(paste0, .) %>%
           toString
     } ) 

mget(ls(pattern = "^string\d+$")) %>%
    as_tibble %>%
    mutate(output = output)

-输出

# A tibble: 3 x 4
#  string1 string2 string3 output                                
#  <chr>   <chr>   <chr>   <chr>                                 
#1 AB      "E"     FH      AEF, BEF, AEH, BEH                    
#2 CD      "GH"    NG      CGN, DGN, CHN, DHN, CGG, DGG, CHG, DHG
#3 EF      ""      C       EC, FC    

数据

string1 <- c("AB", "CD", "EF")
string2 <- c("E", "GH", "")
string3 <- c("FH", "NG", "C")