2012-01-17 14 views
25

नहीं है ऐसा लगता है कि grep में एक उलटा तर्क है, grepl नहीं है।grepl: एक स्ट्रिंग के भीतर खोजें जिसमें पैटर्न

2 फिल्टर

data$ID[grepl("xyx", data$ID) & data$age>60] 

का उपयोग कर रहा उम्र> 60 और आईडी युक्त "xyx" नहीं करने के लिए कैसे सबसेट कर सकते हैं के लिए सबसेट तक चाहते हैं? मैंने क्या किया

data$ID[abs(grepl("xyx", data.frame$ID)-1) & data$age>60] 

जो स्पष्ट रूप से काम करता है, लेकिन भयानक और अनजान दिखता है। क्या कोई अच्छा समाधान/तर्क है?

धन्यवाद

उत्तर

41

grepl एक तार्किक वेक्टर देता है। यदि आप विपरीत परिणाम चाहते हैं तो आप ! ऑपरेटर का उपयोग कर सकते हैं।

data$ID[!grepl("xyx", data$ID) & data$age>60] 
+0

सुंदर लग रहा है। धन्यवाद। – ECII

+0

आपका स्वागत है। क्या आपको खुशी नहीं है कि आपको 'उलटा = TRUE' के बजाय'! 'टाइप करना होगा? ;-) –

+0

(abs() - 1) की तुलना में, एकमात्र '!' बहुत अच्छा दिखता है .... हो सकता है कि आप में से एक 20k + प्रतिष्ठा वाले विशेषज्ञों को कुछ समय मिल सके और आर में स्ट्रिंग ऑपरेशंस के बारे में अच्छी समीक्षा पोस्ट लिख सकें। जैसे जोरन ने * परिवार को लागू करने के बारे में http://stackoverflow.com/प्रश्न/3505701/आर-ग्रुपिंग-फ़ंक्शंस-स्प्ली-बनाम-लप्ली-बनाम-लागू-बनाम-टैप्ली-बनाम-बनाम-एग्रीग्रा – ECII

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