R变异&;gsub,其中模式基于列
我正在尝试使用R变异&;gsub,其中模式基于列,r,dplyr,gsub,mutate,rowwise,R,Dplyr,Gsub,Mutate,Rowwise,我正在尝试使用mutate()和gsub()从var\u 1中删除pattern 由于gsub()。否则,它将只使用模式列中的第一条记录 我想知道是否有其他方法可以在不使用rowwise()的情况下实现相同的结果,因为它会大大降低过程的速度 test <- data.frame( var_1 = c('1AB', '2AB', '3C') ,pattern = c('AB','A','C') ) test %>% dplyr::rowwise() %>% dp
mutate()
和gsub()
从var\u 1
中删除pattern
由于gsub()。否则,它将只使用模式
列中的第一条记录
我想知道是否有其他方法可以在不使用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)
)
test%
dplyr::行方式()%>%
dplyr::mutate(结果=sub(模式“”,变量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
#一个tible:3 x 4
#顺时针:
变量1变量2模式结果
1 AB假AB 1
2真正的A 2B
3C假c3
您可以使用矢量化的stringr
选项
使用str\u 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\u replace
相同
我们可以使用map2
library(dplyr)
library(purrr)
test %>%
mutate(result = map2_chr(var_1, pattern, ~ sub(.y, '', .x)))
谢谢Ronak!我试着比较mutate+str_替换和with+str_替换,似乎mutate+str_替换要慢得多。你知道为什么会这样吗(请参阅我下一篇评论中的代码)?microbenchmark::microbenchmark(test%>%mutate(temp=stringr::str_remove(string=var_1,pattern=pattern)),with(test,stringr::str_remove(string=var_1,pattern=pattern)),times=10L)我实际上不知道mutate
是否会增加额外的开销。您正在测试多少行数据?我使用的是上面定义的相同数据帧,因此有3行数据,而mutate
方法所需时间至少是with
方法的10倍。如果使用3行数据,则无法获得任何有意义的结果。将数据扩展到至少10k行,然后进行测试。
library(dplyr)
library(purrr)
test %>%
mutate(result = map2_chr(var_1, pattern, ~ sub(.y, '', .x)))