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