2016-08-02 52 views
5

我正在寻找一个函数,它接收一个数据帧列,检查它是否包含来自一个字符串向量的文本,并在匹配时对其进行过滤(包括部分文本匹配) 。r - 过滤包含一个向量中的字符串的行

例如,采取以下的数据帧:

animal  |count 
aardvark |8 
cat  |2 
catfish |6 
dog  |12 
dolphin |3 
penguin |38 
prairie dog|59 
zebra  |17 

和下面的矢量

c("cat", "dog") 

我想通过“动物”列来运行,检查所述值完全或部分匹配矢量中的一个字符串,并过滤掉那些不是的字符串。由此产生的数据帧将是:

animal  |count 
cat  |2 
catfish |6 
dog  |12 
prairie dog|59 

谢谢!

肖恩

+1

使用'grepl':as'df [grepl(“(cat | dog)”,df $ animal),]'应该可以工作。 – lmo

回答

5

我们可以使用grep

df1[grep(paste(v1, collapse="|"), df1$animal),] 

或者使用dplyr

​​
+1

这样做,谢谢! –

7

使用dplyr,你可以试试下面的,假设你的表是df

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

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

+0

我不确定这是如何工作的,因为“动物”列没有完全匹配。 – akrun

+0

实际数据框的结构是什么?我们有一个包括玩具数据在内的可重复的例子吗? – Megatron

+0

这个问题是它只能过滤完全匹配(猫和狗),而不是部分匹配(鲶鱼和草原狗)。我应该指出这一点。不过,我欣赏这种外观。 –

相关问题