dataframe - How to get a new column in a data frame which has only elements which appear in the set more than once in R -
डेटा:
डीबी 1 & lt; - data.frame (orderItemID = c (1, 2,3,4,5,6,7,8,9,10), ऑर्डरडेट = सी ("1.1.12", "1.1.12", "1.1.12", "1.1.12", "1.1। 12 "," 1.1.12 "," 1.1.12 "," 1.1.12 "," 2.1.12 "," 2.1.12 "), मद आईडी = सी (2,3,2,5,12,4, 2,3,1,5), आकार = कारक (सी ("एल", "एस", "एक्सएल", "एक्सएस", "एम", "एस", "एल", "एम", "एक्सएक्स" "लाल", "लाल", "बैंगनी", "सफेद", "लाल", "लाल" काला ")), ग्राहकआईडी = सी (33, 15, 1, 33, 14, 55, 33, 78, 94, 23))
अपेक्षित आउटपुट:
selection_order = c ("हाँ", "नहीं", "नहीं", "नहीं", "नहीं", "नहीं", "हाँ", "नहीं", "नहीं", "नहीं")
दो अलग-अलग रंगों में एक ही मद (डेटा सेट में मेरे पास एक ही आकार या समान रंग वाला आइटम है, एक ही मद आईडीआईडी हर पंजीकृत उपयोगकर्ता के पास अपनी अनूठी ग्राहक आईडी है।
मैं जब उपयोगकर्ता ऑर्डर के उत्पादों (एक से अधिक तब) को एक ही मद आईडी (विभिन्न आकारों या रंगों में) = उदाहरण के साथ उपयोगकर्ता <आईडी> ग्राहक आईडी = 33
ItemID = 2
) का आदेश दें और इसे "हाँ" या "चयन आदेश" जैसे नामक एक नया कॉलम में चिह्नित करें (उदाहरण के लिए) नहीं"। इसे मुझे "हां" नहीं दिखाया जाना चाहिए, जब वह किसी अन्य आईडी के साथ किसी आइटम को ऑर्डर करता है मैं सिर्फ एक ही आईडी के साथ "हाँ" प्राप्त करना चाहता हूं, जब एक ही आईडी के साथ (उसी दिन या पूर्व में) एक और बार होता है - अन्य आईडी (अन्य उत्पादों) के बावजूद।मैंने बहुत पहले से कोशिश की है, लेकिन कुछ नहीं काम करता है कुछ हजार अलग उपयोगकर्ता आईडी और मद आईडी हैं- इसलिए मैं प्रत्येक आईडी के लिए सबसेट नहीं कर सकता मैंने इसे डुप्लिकेट फ़ंक्शन के साथ करने की कोशिश की - लेकिन यह एक संतोषजनक समाधान के लिए अग्रणी नहीं है:
समस्या यह है कि अगर एक ही व्यक्ति एक ऑब्जेक्ट (ग्राहक आईडी दोहराया गया है) और दूसरा व्यक्ति (ग्राहक आईडी) उसी आईडी के साथ एक आइटम का ऑर्डर करें (मद आईडी फिर दोहराया जाता है) यह मुझे "हां" देता है: और इस मामले में यह "नहीं" होना चाहिए। (उदाहरण में डुप्लिकेट फ़ंक्शन मुझे "नहीं" के बजाय IitemID 4 के क्रम में "हां" देगा)
मुझे लगता है कि मैं समझता हूं कि अब आपका वांछित आउटपुट क्या है,
लाइब्रेरी (डेटा योग्य) सेट डीटी (डीबी 1) [, चयन_क्रम: =। & Gt; 1, द्वारा = सूची (ग्राहकआईडी, मद आईडी)] डीबी 1 # ऑर्डर आईटैमिड ऑर्डर दिनांक आइटम आईडी का आकार रंग ग्राहक आईडी चयन_क्रम # 1: 1 1.1.12 2 एल नीले 33 TRUE # 2: 2 1.1.12 3 एस काला 15 गलत # 3: 3 1.1 12 2 एक्सएल नीला 1 गलत # 4: 4 1.1.12 5 एक्स ऑरेंज 33 फॉल्स # 5: 5 1.1.12 12 मीटर लाल 14 गलत # 6: 6 1.1.12 4 एस नेवी 55 फॉल्स # 7: 7 1.1.12 2 एल लाल 33 TRUE # 8: 8 1.1.12 3 एम बैंगनी 78 गलत # 9: 9 2.1.12 1 एक्सएक्स व्हाइट 94 फॉल्स # 10: 10 2.1.12 5 एक्सक्सेल ब्लैक 23 FALSE
एक data.frame
में वापस कन्वर्ट करने के लिए, DB1 & lt; - as.data.frame (DB1)
(पुराने संस्करणों के लिए) या सेट डीएफ (डीबी 1)
लेट्स के लिए data.table
संस्करण।
आप इसे आधार आर (कम कुशलतापूर्वक) के साथ बेस आर भी कर सकते हैं
<पूर्व> परिवर्तन (डीबी 1, चयन_क्रमित = एवे (मद आईडी, सूची (ग्राहकआईडी, मद आईडी), फ़न = फ़ंक्शन (x) लंबाई (x) & gt; 1))
या dplyr
पैकेज का उपयोग कर
लाइब्रेरी (dplyr) डीबी 1% & gt;% group_by ( CustomerID, itemID)% & gt;% उत्परिवर्तित करें (selection_order = n () & gt; 1)
Comments
Post a Comment