R:通过使用“ grepl”匹配列表中的部分数据来过滤数据帧

时间:2019-06-26 13:38:18

标签: r dplyr grepl

我的数据框很大(df),我想通过搜索列(df$column)和列表(aList)之间的部分匹配来进行过滤。

aList <- c("ID1", "ID2", "ID3")

我用于过滤的数据框中的变量包含的值可能仅以列表中的值开头。例如:ID1_23ID2AV

然后,我想使用grepl或类似方法在我的数据框列中搜索以aList中的值开头的任何值。当仅搜索单个值时,我处理这种方式的方法是:

library(dplyr)
newDf <- df %>% filter(grepl("^ID1", column))

然后我的问题出现在如何使用列表中的所有值进行相似处理。我尝试了以下方法:

dummyList <- c()
for (i in 1:length(aList)){
    list1 <- dplyr::filter(grepl(paste("\"^", aList[i], "\""), df$column))
    rbind(list1, dummyList)
}

为我提供了以下错误代码:

Error in UseMthod("filter_") : 
  no applicable method for ´filter_´ applied to an obecjt of class "logical"

有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以一起paste个值

library(tidyerse)
df %>% 
      filter(grepl(str_c("^(", str_c(aList,  collapse="|"), ")"), column))