2

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

由于gsub()只需要一个字符串,我必须rowwise()mutate(). 否则它将只使用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 
4

2 回答 2

5

您可以使用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_replacewith replacement as相同""

test %>%  mutate(result = str_replace(var_1, pattern, ''))
于 2020-11-24T10:33:33.987 回答
0

我们可以用map2

library(dplyr)
library(purrr)
test %>% 
      mutate(result = map2_chr(var_1, pattern, ~ sub(.y, '', .x)))
于 2020-11-24T22:44:08.630 回答