2012-03-24 10 views
49

संभव डुप्लिकेट:
Standard way to remove multiple elements from a dataframeआर नहीं सबसेट में

मैं आर में पता है कि अगर उसकी पहचान पर आधारित एक और समूह या मिलान के उपसमूह के लिए खोज रहे हैं आप कुछ का उपयोग करेंगे

subset(df1, df1$id %in% idNums1) 

मेरा प्रश्न यह है कि विपरीत तरीके से कैसे करें या आइटमों का चयन करें जो आईडी के वेक्टर से मेल नहीं खाते हैं।

मैं ! का उपयोग कर, लेकिन त्रुटि संदेश

subset(df1, df1$id !%in% idNums1) 

पाने की कोशिश की मुझे लगता है कि मेरे बैकअप इस तरह कुछ समय क्या करना है:

matches <- subset(df1, df1$id %in% idNums1) 
nonMatches <- df1[(-matches[,1]),] 

लेकिन मैं वहाँ कुछ थोड़ा और अधिक कुशल है उम्मीद कर रहा हूँ।

+7

मेरा उत्तर यहाँ देखें:: http://stackoverflow.com/questions/7494848/standard-way-to-remove-multiple-elements-from-a यह नकारना करने के लिए, आप पूरी वेक्टर नकारना करने की जरूरत है -डेटाफ्रेम – Chase

+6

या चेस के संस्करण के समतुल्य रूप से, मेरा उत्तर [यहां] (http://stackoverflow.com/a/9846035/324364)। – joran

उत्तर

102

अभिव्यक्ति df1$id %in% idNums1 एक तार्किक वेक्टर उत्पन्न करती है।

!(df1$id %in% idNums1) 
+2

अतिरिक्त बयानों के साथ अतिरिक्त '()' याद रखें। 'अगर (! (कुछ)) {प्रिंट" कुछ नहीं "}' –

+0

कई घोंसले होने पर ब्रैकेट असुविधाजनक होते हैं, मैंने पाया है कि ''इन-इन' ऑपरेटर को काफी मददगार नहीं है। यहां ऐसा करने के तरीके पर कई सुझाव दिए गए हैं: http://stackoverflow.com/questions/5831794/opposite-of-in – PatrickT

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