加速R中的字符串过滤

时间:2018-04-05 18:22:22

标签: r string dplyr sapply stringr

我有一个数据框,其中一列代码用逗号分隔。我目前通过查看代码列来过滤此数据框,如果代码出现在列表中,我会保留该行。我的问题是这个数据框正在扩展,可接受的代码列表正在扩展,所以我想尽可能加快这个过程。理想情况下,有一种方法可以将行标记为已经检查过,如果行中有好的代码,那么就不必再检查所有其他可接受的代码。

当前的数据框看起来像这样:

Code_column
,12ab,
,12ab,123b,
,456t,345u,
,12ab,789p,

良好代码列表:

good_codes <- c(',123b,', ',456t,', ',345u,')

目前我的过滤流程:

df %>%
filter(sapply(`Code_column`, 
            function(x) any(sapply(good_codes, str_detect, string = x))) == TRUE)

最后一栏

Code_column
,12ab,123b,
,456t,345u,

1 个答案:

答案 0 :(得分:1)

我认为我们不需要sapply

df[str_detect(df$Code_column,paste(good_codes, collapse = '|')),]
[1] ",12ab,123b," ",456t,345u,"

你可以通过| &安培;到str_detect

paste(good_codes, collapse = '|')
[1] ",123b,|,456t,|,345u,"