दो स्तंभों में मानों के विशिष्ट जोड़े के साथ आर में डेटा फ़्रेम पंक्तियों की पहचान करना

image

मैं डेटा फ़्रेम (या मैट्रिक्स) में उन सभी पंक्तियों की पहचान करना चाहता हूं जिनके कॉलम 1 और 2 में मान एक विशिष्ट जोड़ी से मेल खाते हैं। उदाहरण के लिए, यदि मेरे पास एक मैट्रिक्स है

मैं उन पंक्तियों की पहचान करना चाहूंगा जिनमें निम्नलिखित में से कोई भी जोड़ा शामिल है, अर्थात वे सभी पंक्तियाँ जिनके पहले और दूसरे में 1,2 या 2,4 का संयोजन है कॉलम

निम्नलिखित काम नहीं करता है

क्योंकि, जैसा कि अपेक्षित था, यह पहले कॉलम में 1,2 और दूसरे में 2,4 के सभी संयोजन लौटाता है (यानी पंक्तियाँ 2,3,5) इसके बजाय केवल पंक्तियों 2 और 5 को इच्छानुसार), ताकि पंक्ति [1,4] को शामिल किया जा सके, भले ही यह उन जोड़ियों में से एक नहीं है जिनके लिए मैं पूछताछ कर रहा हूं। इस तरह की विशिष्ट जोड़ियों का मिलान करने के लिए who...%in%... का उपयोग करने का कोई सरल तरीका होना चाहिए, लेकिन मैं इसका कोई उदाहरण नहीं ढूंढ पाया जो काम करता हो।

ध्यान दें कि मुझे उन पंक्तियों की स्थिति/पंक्ति संख्याओं की आवश्यकता है जो वांछित स्थिति से मेल खाती हैं।

मुझे लगता है कि जब आप who() का उपयोग कर रहे हैं तो आप स्थिति चाहते हैं, न कि केवल यह कि क्या कोई मिलान है। आप पंक्ति संख्या को testmat में cbind() कर सकते हैं और फिर इसे of_interest के साथ मर्ज() कर सकते हैं।

आपने अपनी टिप्पणी में उल्लेख किया है कि आपके पास 10e8 पंक्तियाँ हैं। यह मुझे दो बातें सोचने पर मजबूर करता है:

इसे देखते हुए मैं Which() या अन्य दृष्टिकोणों का उपयोग करने से बचूंगा जो जल्दी बाहर नहीं निकलते हैं। यहां कुछ आरसीपीपी कोड हैं जो बड़े डेटासेट के साथ मर्ज() से बहुत तेज़ होना चाहिए:

मुझे लगता है कि उप-मैट्रिसेस के रूप में पंक्तियों तक पहुंच मैट्रिक्स इंडेक्सिंग के साथ डबल फॉर-लूप की तुलना में अधिक मुहावरेदार आरसीपीपी कोड है, लेकिन मेरे पास नहीं है विचार जो तेज़ है इसलिए यदि प्रदर्शन आपकी प्राथमिक चिंता है तो मैं विभिन्न दृष्टिकोण और बेंचमार्क आज़माऊंगा।

यहां एक दृष्टिकोण है जिसके साथ + एस्प्लिट

जो थोड़ा अक्षम हो सकता है एपलिस्ट, लेकिन यदि गति आपकी चिंताओं में से एक नहीं है तो छोटे डेटासेट के लिए अच्छा काम करना चाहिए।

आप अपने उदाहरण (टेस्टमैट और ऑफ_इंटरेस्ट) से मानों को एक ही मान में पेस्ट() कर सकते हैं और फिर एक %in कर सकते हैं % मूल्यांकन। उदाहरण के लिए:

यदि %in% आपके लिए पर्याप्त तेज़ नहीं है, तो %in के तेज़ विकल्प के रूप में fastmatch से %fin% या fmatch() आज़माने पर विचार करें।

हम पंक्ति का उपयोग कर सकते हैं .names() + {ivs}.

सेट-अप:

सूचकांक,

तुलना,

और फिर से अनुक्रमणिका:

Ask AI
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54 #55 #56 #57 #58 #59 #60 #61 #62 #63 #64 #65 #66 #67 #68 #69 #70