R用空模式或空字符串变异和替换字符串

R mutate & replace string with empty pattern or empty string

我正在尝试从 mutate().

中的另一个字符串列 (entry) 中删除一些模式 (to_remove)

问题是我的字符串和模式列都包含一些空字符串。因此,使用一些矢量化函数,例如 stringr::str_remove() 会导致一些警告并大大减慢处理速度。

我注意到如果没有空字符串和模式(即用一些值替换它们),完成大约 1e5 行记录只需要不到 1 秒的时间。但是,如果出现警告,则需要 10 秒以上。

我想知道是否有任何方法可以在 mutate() 中使用 stringr::str_remove() 但跳过那些空行,这样我仍然可以从矢量化中获得速度优势。

请注意,我也可以使用 dplyr::rowwise() + gsub(),但 rowwise() 也会大大降低速度:(

示例代码:

library(tidyverse)
library(stringr)

set.seed(123)

temp <- data.frame(
  entry = c('A12','JW13','C','')
  ,to_remove = c('A','W','','D')
) %>%
  sample_n(1e5,replace = T)

temp <- temp %>%
  mutate(
    removed = str_remove(entry,to_remove)
  )

尝试将空白值替换为 NA :

library(dplyr)
library(stringr)

temp %>%
  mutate(to_remove = na_if(to_remove, ''),
         removed = str_remove(entry,to_remove))

我们可以做到

library(dplyr)
library(stringr)
temp %>% 
   mutate(removed = str_remove(entry, replace(to_remove, to_remove == "", NA)))