2012-12-08 7 views
19

मेरे पास दो डेटा फ्रेम (ए, बी) हैं जो समान कॉलम नाम (सी) रखते हैं, लेकिन उस कॉलम में अलग-अलग अद्वितीय मान हो सकते हैं। मैं यह जांचना चाहता हूं कि डेटा फ्रेम (ए) में कॉलम (सी) में 'मान' डेटा फ्रेम (बी) में मौजूद है या नहीं।जांचें कि डेटा एक डेटा फ्रेम में मौजूद है या नहीं

A = data.frame(C=c(1,2,3,4)) 
B = data.frame(C=c(1,3,4,7)) 

उपरोक्त उदाहरण में, मैं अगर '2' बी में मौजूद है जाँच करना चाहते हैं या नहीं वहाँ पाश के बिना किसी भी एक लाइनर है, जैसा कि मैंने बहुत बड़ी फ़ाइलों है और हर पंक्ति में इस की जाँच करने के लिए होगा।

+2

'setdiff' ब्याज – James

उत्तर

52

उपयोग %in% कौन आपको बता देंगे जो एक के स्तंभ सी के मूल्यों के रूप

A$C %in% B$C 

इस प्रकार बी

में हैं क्या दिया जाता है एक तार्किक वेक्टर है। अपने उदाहरण के विशिष्ट मामले में, आप मिल:

A$C %in% B$C 
# [1] TRUE FALSE TRUE TRUE 

जो तुम A$C को A की पंक्तियों के लिए या एक सूचकांक के रूप में एक सूचकांक के रूप में उपयोग कर सकते हैं वास्तविक मूल्यों को प्राप्त करने के लिए:

# as a row index 
A[A$C %in% B$C, ] # note the comma to indicate we are indexing rows 

# as an index to A$C 
A$C[A$C %in% B$C] 
[1] 1 3 4 # returns all values of A$C that are in B$C 

हम यह भी नकारना कर सकते हैं:

A$C[!A$C %in% B$C] 
[1] 2   # returns all values of A$C that are NOT in B$C 



आप यदि किसी विशिष्ट मान B $ सी में है जानना चाहते हैं , एक ही समारोह का उपयोग करें: पिछले अभिव्यक्ति आपको बता कि क्या एक $ सी में दूसरा मान B $ सी में थे

2 %in% B$C # "is the value 2 in B$C ?" 
    # FALSE 

    A$C[2] %in% B$C # "is the 2nd element of A$C in B$C ?" 
    # FALSE 
+0

का हो सकता है। –

+0

हां, बिल्कुल। मूल उदाहरण में 'ए $ सी [2] '' 2' है, इसलिए स्पष्टता की कमी है। मैंने आशा व्यक्त करने के लिए मेरे उदाहरण में टिप्पणियां संपादित कीं। –

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