用变量连接字符串

时间:2021-01-12 11:39:31

标签: r string dataframe

输入数据集如下:

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"))

3 个答案:

答案 0 :(得分:2)

这是一个基本的 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

答案 1 :(得分:1)

在添加最后一次粘贴的 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 年 1 月 12 日创建

答案 2 :(得分:0)

使用 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
相关问题