2016-08-02 75 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

這個問題是它只能過濾完全匹配(貓和狗),而不是部分匹配(鮎魚和草原狗)。我應該指出這一點。不過,我欣賞這種外觀。 –

相關問題