r - 过滤包含向量的字符串的行

Sea*_*n G 7 r dplyr

我正在寻找一个带有数据帧列的函数,检查它是否包含来自字符串向量的文本,并在匹配时过滤它(包括部分文本匹配).

例如,采用以下数据框:

animal     |count
aardvark   |8
cat        |2
catfish    |6
dog        |12
dolphin    |3
penguin    |38
prairie dog|59
zebra      |17
Run Code Online (Sandbox Code Playgroud)

和以下矢量

c("cat", "dog")
Run Code Online (Sandbox Code Playgroud)

我想通过'animal'列,检查值是否完全或部分匹配向量中的一个字符串,并过滤掉那些不匹配的字符串.结果数据框将是:

animal     |count
cat        |2
catfish    |6
dog        |12
prairie dog|59
Run Code Online (Sandbox Code Playgroud)

谢谢!

肖恩

Meg*_*ron 8

使用dplyr,您可以尝试以下方法,假设您的表是df:

library(dplyr)
library(stringr)
animalList <- c("cat", "dog")
filter(df, str_detect(animal, paste(animalList, collapse="|")))
Run Code Online (Sandbox Code Playgroud)

我个人发现在查看我的代码几个月后使用dplyrstringr更容易阅读.


akr*_*run 7

我们可以用 grep

df1[grep(paste(v1, collapse="|"), df1$animal),]
Run Code Online (Sandbox Code Playgroud)

或使用 dplyr

df1 %>%
    filter(grepl(paste(v1, collapse="|"), animal))
Run Code Online (Sandbox Code Playgroud)