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