【问题标题】:Concatenate String with Variables用变量连接字符串
【发布时间】:2021-01-12 11:39:31
【问题描述】:

输入数据集如下:

test = data.frame(Var_a = c("A|B","C|D|E","F"),Var_b = c("X"))

所需的输出数据集如下:

test1 = data.frame(Var_C = c("AX|BX","CX|DX|EX","FX"))

【问题讨论】:

    标签: r string dataframe


    【解决方案1】:

    这是一个基本的 R 选项:

    | 上拆分字符串,将每个单词粘贴到对应的Var_b 值,然后将字符串折叠回去。

    test$Var_c <- mapply(function(x, y) paste0(x, y, collapse = '|'), 
                     strsplit(test$Var_a, '|', fixed = TRUE), test$Var_b)
    
    test
    
    #  Var_a Var_b    Var_c
    #1   A|B     X    AX|BX
    #2 C|D|E     X CX|DX|EX
    #3     F     X       FX
    

    【讨论】:

      【解决方案2】:

      在添加最后一次粘贴的 id 后,您可以使用 {tidyverse} 中方便的 separate_rows() 将项目分隔为每行一个。

      类似

      library(tidyverse)
      test <- data.frame(Var_a = c("A|B","C|D|E","F"),Var_b = c("X"))
      test %>% 
        mutate(id = seq_len(nrow(test))) %>% 
        separate_rows(Var_a) %>% 
        mutate(Var_c = paste0(Var_a, Var_b)) %>% 
        group_by(id) %>% 
        summarise(Var_c = paste0(Var_c, collapse = "|"))
      #> `summarise()` ungrouping output (override with `.groups` argument)
      #> # A tibble: 3 x 2
      #>      id Var_c   
      #>   <int> <chr>   
      #> 1     1 AX|BX   
      #> 2     2 CX|DX|EX
      #> 3     3 FX
      

      reprex package (v0.3.0) 于 2021-01-12 创建

      【讨论】:

        【解决方案3】:

        使用 gsub 和前瞻正则表达式:

        test%>%mutate(Var_C=gsub('(\\w)(?=\\||$)',paste0('\\1',Var_b),Var_a, perl=TRUE))
        
        #  Var_a Var_b    Var_C
        #1   A|B     X    AX|BX
        #2 C|D|E     X CX|DX|EX
        #3     F     X       FX
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          • 2016-11-15
          • 2018-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多