दिलचस्प पोस्ट
एक विशेष प्रतिबद्ध में लेखक को बदलें चेरी की एक सीमा को चुनने और दूसरे शाखा में कैसे विलय करना है टेक्स्ट फ़ाइल में बनाएं या लिखें / संलग्न करें बहुत कम पैरामीटर अपेक्षित 1, रिकॉर्डसेट समस्या एक <a> लिंक के 'href' मूल्य को खोजने के लिए नियमित अभिव्यक्ति सी # वर्तनी जांच वर्ग का उपयोग करने की कोशिश कर रहा है सी ++ स्ट्रिंग लीटरल्स एस्केप वर्ण के लिए नियम व्युत्पन्न वर्ग, बेस वर्ग की निजी विधि को कैसे लागू कर सकता है? R: एक्स, वाई, जेड से एक 3 डी की सतह का प्लॉटिंग कैसे SIGTERM संकेत की कृपा से संसाधित करें? ListView setOnItemClickListener बटन जोड़कर काम नहीं कर रहा है onSaveInstanceState () और onRestoreInstanceState () क्या करता है ** (डबल स्टार / तारांकन) और * (स्टार / तारांकन) मापदंडों के लिए करते हैं? 5 सितारा रेटिंग के आधार पर सॉर्ट करने का एक बेहतर तरीका क्या है? आंतरिक त्रुटि 500 ​​अपाचे, लेकिन लॉग में कुछ नहीं?

अद्वितीय पहचानकर्ता द्वारा समेकित और एक स्ट्रिंग में संबंधित मानों को जोड़ना

मुझे एक ऐसी ज़रूरत है जो मैं सोच सकता हूं कि aggregate या फिर से reshape संतुष्ट हो सकता है, लेकिन मैं काफी कुछ नहीं समझ सकता।

मेरे पास नाम ( brand ) की एक सूची है, और आईडी नंबर ( id ) के साथ। यह डेटा लंबे समय में है, इसलिए नामों में एकाधिक ID हो सकते हैं। मैं नाम ( brand ) द्वारा दो-डुप्लिकेट करना चाहता हूं और एकाधिक संभावित id को एक टिप्पणी से पृथक स्ट्रिंग में जोड़ना चाहता हूं।

उदाहरण के लिए:

 brand id RadioShack 2308 Rag & Bone 4466 Ragu 1830 Ragu 4518 Ralph Lauren 1638 Ralph Lauren 2719 Ralph Lauren 2720 Ralph Lauren 2721 Ralph Lauren 2722 

बन जाना चाहिए:

 RadioShack 2308 Rag & Bone 4466 Ragu 1830,4518 Ralph Lauren 1638,2719,2720,2721,2722 

मैं यह कैसे पूरा होगा?

वेब के समाधान से एकत्रित समाधान "अद्वितीय पहचानकर्ता द्वारा समेकित और एक स्ट्रिंग में संबंधित मानों को जोड़ना"

चलो अपने डेटा को कॉल करें। फ्रेम DF

 > aggregate(id ~ brand, data = DF, c) brand id 1 RadioShack 2308 2 Rag & Bone 4466 3 Ragu 1830, 4518 4 Ralph Lauren 1638, 2719, 2720, 2721, 2722 

aggregate का उपयोग करने वाला एक अन्य विकल्प है:

 result <- aggregate(id ~ brand, data = DF, paste, collapse = ",") 

यह एक ही परिणाम पैदा करता है और अब id list नहीं है। @ फ्रैंक टिप्पणी करने के लिए धन्यवाद प्रत्येक कॉलम के class को देखने के लिए:

 > sapply(result, class) brand id "factor" "character" 

जैसा टिप्पणी में @ डेविड एरेनबर्ग द्वारा वर्णित किया गया है, एक और विकल्प टूस्ट्रिंग फ़ंक्शन का उपयोग कर रहा है:

 aggregate(id ~ brand, data = DF, toString) 

data.table में एक अच्छी साफ लाइन

 library(data.table) setDT(DF) 

दो विकल्प:

एक सूची के रूप में परिणाम

 DF[ , .(id = list(id)), by = brand] brand id 1: RadioShack 2308 2: Rag & Bone 4466 3: Ragu 1830,4518 4: Ralph Lauren 1638,2719,2720,2721,2722 > 

एक स्ट्रिंग के रूप में परिणाम

 DF[ , .(id = paste(id, collapse=",")), by = brand] brand id 1: RadioShack 2308 2: Rag & Bone 4466 3: Ragu 1830,4518 4: Ralph Lauren 1638,2719,2720,2721,2722 

ध्यान दें

हालांकि दो परिणाम एक ही दिखते हैं (जब आप उन्हें मुद्रित करते हैं, वे समान दिखते हैं), वे वास्तव में बहुत अलग हैं और अलग-अलग कार्यक्षमता के लिए अनुमति देते हैं

अर्थात्, सूची विकल्प (पहले वाला) का उपयोग करने से आप ऑरगनल id पर कार्य करने की अनुमति देता है।

उत्तरार्द्ध आपको सूचना को अधिक आसानी से प्रदर्शित करने की अनुमति देगा ( CSV या excel को निर्यात सहित), लेकिन id पर काम करने के लिए उन्हें वापस चुकाने की आवश्यकता होगी

या dplyr का उपयोग कर:

 library(dplyr) DF %>% group_by(brand) %>% summarise(id = paste(id, collapse = ",")) 

जहां DF आपके डेटा। फ्रेम का नाम है

यहाँ आधार आर में जानकारी है:

 myby <- by(df$id,df$brand,function(x)paste(x,collapse=",")) 

"द्वारा" ऑब्जेक्ट्स का स्वरूपण अजीब है आप data.frame(id=c(myby)) ले सकते हैं और ब्रांड rownames बन जाएगा:

 # id # RadioShack 2308 # Rag & Bone 4466 # Ragu 1830,4518 # Ralph Lauren 1638,2719,2720,2721,2722 

वैकल्पिक रूप से, यदि आप data.table पैकेज को लोड करते हैं, तो यह काम करेगा:

 dt <- data.table(df) dt[,paste(id,collapse=","),by=brand] # brand V1 # 1: RadioShack 2308 # 2: Rag & Bone 4466 # 3: Ragu 1830,4518 # 4: Ralph Lauren 1638,2719,2720,2721,2722