R mutate & gsub 其中模式基于列

R mutate & gsub where pattern is based on a column

我正在尝试使用 mutate()gsub()var_1 中删除 pattern

由于gsub()只需要一个字符串,所以我必须在mutate()之前使用rowwise()。否则它只会使用 pattern 列中的第一条记录。

我想知道是否有任何其他方法可以在不使用 rowwise() 的情况下获得相同的结果,因为它会大大减慢过程。

test <- data.frame(
  var_1 = c('1AB', '2AB', '3C')
  ,pattern = c('AB','A','C')
)

test %>%
  dplyr::rowwise() %>%
  dplyr::mutate( result = sub(pattern, '', var_1)
          )

想要的结果:

# A tibble: 3 x 4
# Rowwise: 
  var_1 var_2 pattern result
  <chr> <lgl> <chr>   <chr> 
1 1AB   FALSE AB      1     
2 2AB   TRUE  A       2B    
3 3C    FALSE C       3 

您可以使用矢量化的 stringr 选项。

使用str_remove

library(dplyr)
library(stringr)

test %>% mutate(result = str_remove(var_1, pattern))

#  var_1 pattern result
#1   1AB      AB      1
#2   2AB       A     2B
#3    3C       C      3

这与使用 str_replace 替换为 "" 相同。

test %>%  mutate(result = str_replace(var_1, pattern, ''))

我们可以使用map2

library(dplyr)
library(purrr)
test %>% 
      mutate(result = map2_chr(var_1, pattern, ~ sub(.y, '', .x)))