【问题标题】:Is the an R function to "multiply" individual characters in a string?R函数是“乘”字符串中的单个字符吗?
【发布时间】:2021-05-13 17:53:36
【问题描述】:
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() 函数,但我不确定如何使用。

【问题讨论】:

    标签: r permutation


    【解决方案1】:

    "" 分割两个字符串后,使用Map 循环对应的元素,创建matrixouter 的组合,同时将FUN 指定为paste 以连接个人元素,unlist list 输出后 paste 将字符串向量转换为单个字符串 (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 确保如果字符串中只有空白 ("") 元素,它不会返回 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")
    

    【讨论】:

    • 谢谢!!!!如果还有一个 (string3) 列,这将如何工作? :o
    • @TheresaUyenLe 如果有超过 2 个字符串,也许expand.grid 会是一个选项
    • @TheresaUyenLe 我更新了一个更一般的案例
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2022-12-21
    • 2021-08-04
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多