【问题标题】:How to interleave vector of strings with a string如何将字符串向量与字符串交错
【发布时间】:2022-02-03 01:00:18
【问题描述】:

我有以下向量示例:

v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")

请注意,每个向量的长度是可以变化的。

我想要做的是将每个向量与一个字符串交错:

linker <- "xxx"

导致:

c("AA", "xxx", "BB")
c("AA","xxx",  "BB", "xxx", "CCC")

我怎样才能做到这一点?

【问题讨论】:

    标签: r string vector


    【解决方案1】:

    我们可以试试strsplit + paste0,如下所示

    > strsplit(paste0(v2, collapse = sprintf(" %s ", linker)), " ")[[1]]
    [1] "AA"  "xxx" "BB"  "xxx" "CCC"
    

    【讨论】:

      【解决方案2】:

      您可以在这里使用rbind 技巧:

      v1 <- c("AA", "BB")
      v2 <- c("AA", "BB", "CCC")
      linker <- "xxx"
      
      head(c(rbind(v2, linker)), -1)
      
      [1] "AA"  "xxx" "BB"  "xxx" "CCC"
      

      【讨论】:

        【解决方案3】:

        这里有一个可能的答案:

        v1 <- c("AA", "BB")
        
        v2 <- c("AA", "BB", "CCC")
        
        linker <- "xxx"
        
        interleave <- function(v,l){
        
          result <- c()
          
          for(i in 1:length(v)){
            
            if(i!=1){
              
              result <- c(result,l,v[i])
              
            }else{
              
              result <- c(result,v[i])
              
            }
            
          }
          
          return(result)
          
        }
        
        interleave(v1,linker)
        
        interleave(v2,linker)
        

        结果:

        > interleave(v1,linker)
        [1] "AA"  "xxx" "BB" 
        > 
        > interleave(v2,linker)
        [1] "AA"  "xxx" "BB"  "xxx" "CCC"
        
        

        【讨论】:

          【解决方案4】:

          我们可以使用append,然后head 来删除尾随链接器:

          append_linker <- function(vector, linker){
          lapply(vector, \(x) append(x, linker)) |>
                  unlist() |>
                  head(-1)
          }
          
          append_linker(v1, linker)
          
          [1] "AA"  "xxx" "BB" 
          
          append_linker(v2, linker)
          
          [1] "AA"  "xxx" "BB"  "xxx" "CCC"
          

          【讨论】:

            【解决方案5】:

            mapplyc 的创意应用:

            v1 <- c("AA", "BB")
            v2 <- c("AA", "BB", "CCC")
            linker <- 'xxx'
            
            c(mapply(c, linker, v1))[-1]
            
            [1] "AA"  "xxx" "BB"
            
            c(mapply(c, linker, v2))[-1]
            
            [1] "AA"  "xxx" "BB"  "xxx" "CCC"
            

            【讨论】:

              猜你喜欢
              • 2021-09-19
              • 2021-12-10
              • 1970-01-01
              • 2023-03-17
              • 2014-10-12
              • 1970-01-01
              • 2020-07-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多