2014-09-23 10 views
23

के साथ संयोजन में dplyr में टिप्पणियों मैं बाहर काम करने के dplyr और grepl का उपयोग कर एक बड़ी डाटासेट से कुछ टिप्पणियों फ़िल्टर कर सकते हैं कोशिश कर रहा हूँ। मैं grepl से शादी नहीं कर रहा हूं, अगर अन्य समाधान अधिक अनुकूल होंगे।छनन grepl

इस नमूने df लें:

df1 <- data.frame(fruit=c("apple", "orange", "xapple", "xorange", 
          "applexx", "orangexx", "banxana", "appxxle"), group=c("A", "B")) 
df1 


#  fruit group 
#1 apple  A 
#2 orange  B 
#3 xapple  A 
#4 xorange  B 
#5 applexx  A 
#6 orangexx  B 
#7 banxana  A 
#8 appxxle  B 

मैं चाहता हूँ:

  1. फिल्टर बाहर उन मामलों के साथ 'एक्स' शुरुआत
  2. फिल्टर बाहर उन मामलों 'xx'
के साथ समाप्त

मैंने काम करने में कामयाब रहा है कि 'x' या 'xx' वाली सभी चीजों से कैसे छुटकारा पाना है, लेकिन ओ से शुरू नहीं हुआ आर खत्म हो रहा है। यहाँ 'xx' अंदर के साथ सब कुछ से छुटकारा पाने के लिए कैसे (बस के साथ समाप्त नहीं) है:

df1 %>% filter(!grepl("xx",fruit)) 

# fruit group 
#1 apple  A 
#2 orange  B 
#3 xapple  A 
#4 xorange  B 
#5 banxana  A 

यह स्पष्ट रूप से 'ग़लती से' (देखने की मेरी बात से) फ़िल्टर किए गए 'appxxle'।

मैं पूरी तरह से नियमित अभिव्यक्ति के साथ पकड़ के लिए कभी नहीं मिला है। मैं कोड को संशोधित करने की कोशिश कर रहा हूं जैसे: grepl("^(?!x).*$", df1$fruit, perl = TRUE) इसे फ़िल्टर कमांड के भीतर काम करने और इसे बनाने के लिए, लेकिन मुझे काफी कुछ नहीं मिल रहा है।

अपेक्षित उत्पादन:

#  fruit group 
#1  apple  A 
#2 orange  B 
#3 banxana  A 
#4 appxxle  B 

मैं dplyr अंदर यह करने के लिए यदि संभव हो तो करना चाहते हैं।

उत्तर

31

मैं अपने दूसरे regex समझ में नहीं किया, लेकिन यह अधिक बुनियादी regex चाल करने के लिए लगता है:

df1 %>% filter(!grepl("^x|xx$", fruit)) 
### 
    fruit group 
1 apple  A 
2 orange  B 
3 banxana  A 
4 appxxle  B 

और मैं तुम यह जानते मान, लेकिन आप यहां बिल्कुल dplyr उपयोग करने के लिए की जरूरत नहीं है :

df1[!grepl("^x|xx$", df1$fruit), ] 
### 
    fruit group 
1 apple  A 
2 orange  B 
7 banxana  A 
8 appxxle  B 

regex तार कि x के साथ शुरू या xx के साथ समाप्त की तलाश में है। ^ और $ क्रमशः स्ट्रिंग की शुरुआत और समाप्ति के लिए रेगेक्स एंकर हैं। | या ऑपरेटर है। हम grepl के ! के साथ परिणामों को नकार रहे हैं, इसलिए हमें स्ट्रिंग्स मिल रहे हैं जो रेगेक्स के अंदर क्या मेल नहीं खाते हैं।

संबंधित मुद्दे