2016-08-02 15 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' का उपयोग करें: 'df [grepl (" (cat | dog) ", df $ animal) के रूप में,]' काम करना चाहिए। – lmo

उत्तर

5

हम grep

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

या dplyr

df1 %>% 
    filter(grepl(paste(v1, collapse="|"), animal)) 
+1

ऐसा किया, धन्यवाद! –

7

का उपयोग कर dplyr का उपयोग करना, आप निम्नलिखित, अपनी मेज संभालने df है कोशिश कर सकते हैं का उपयोग कर सकते हैं:

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

मुझे व्यक्तिगत रूप से dplyr और stringr का उपयोग मेरे कोड की समीक्षा करते समय महीनों को पढ़ने में आसान होने के लिए मिलता है।

+0

मुझे यकीन नहीं है कि यह कैसे काम करता है, क्योंकि 'पशु' कॉलम का सटीक मिलान नहीं होता है। – akrun

+0

वास्तविक डेटा फ्रेम की संरचना क्या है? क्या हमारे पास खिलौना डेटा सहित एक पुनरुत्पादित उदाहरण है? – Megatron

+0

इस के साथ समस्या यह है कि यह केवल सटीक मिलान (बिल्ली और कुत्ते), और न आंशिक मिलान (कैटफ़िश और प्रैरी कुत्ता) फिल्टर है। मुझे यह निर्दिष्ट करना चाहिए था। हालांकि, मैं देखो की सराहना करता हूं। –