R mutate & gsub,其中模式基于一列



我正在尝试使用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

这与使用替换为CCD_ 13的CCD_。

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

我们可以使用map2

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

最新更新