आर में डेटा फ्रेम का विस्तार कैसे करें


15

आर के साथ कुछ विश्लेषण करते समय मुझे निम्नलिखित समस्या हो रही है।

मेरे पास इस तरह एक डेटाफ्रेम है:

Name | Group | Count
Person 1 | A | 3
Person 2 | A | 1
Person 3 | A | 0
Person 1 | B | 5 
Person 2 | B | 0
Person 3 | B | 1
Person 1 | C | 1

और मुझे इसे "विस्तारित करना होगा" (निश्चित अवधि के लिए निश्चित नहीं है) इस तरह होना चाहिए:

Person 1 | A
Person 1 | A
Person 1 | A
Person 2 | A
Person 1 | B
Person 1 | B

आदि।

तो यह जोड़ी व्यक्ति 1 और ए (इस उदाहरण में, 3) का मूल्य लेता है और व्यक्ति 1 और ए के साथ तीन पंक्तियाँ बनाता है और प्रत्येक व्यक्ति के लिए ऐसा करता है - समूह-संयोजन। ऑनलाइन खोज के लिए किसी अच्छे शब्द का पता नहीं लगा सकते।



आपको reshape2आर में पैकेज का पता लगाना चाहिए । यह dput2 उदाहरण डेटाफ्रेम की मदद भी कर सकता है : एक इनपुट के साथ और दूसरा आउटपुट के साथ।
Zach

मैंने एक उत्तर दिया, लेकिन मुझे लगता है कि यह एक सांख्यिकीय प्रश्न की तुलना में आर प्रोग्रामिंग प्रश्न का अधिक है, इसलिए शायद इसे कहीं और स्थानांतरित किया जाना चाहिए।
गाला

जवाब के लिए धन्यवाद और मेरे प्रश्न में प्रारूपण के साथ मदद करने के लिए धन्यवाद।
Juha-Matti S.

जवाबों:


10

हालांकि यह एक बहुत ही उपयोगी पैकेज है, मुझे लगता है कि आकृति बदलें इस मामले में overkill है, प्रतिनिधि काम कर सकते हैं।

यहाँ कुछ उदाहरण डेटा हैं:

df <- data.frame(
     name=c("Person 1", "Person 2", "Person 3", "Person 1", "Person 2", "Person 3"),
     group=c("A", "A", "A", "B", "B", "B"),
     count=c(3,1,0,5,0,1))

अब, इसे "विस्तार" करने के लिए:

expanded <- data.frame(name = rep(df$name, df$count),
                       group = rep(df$group, df$count))

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


7
यह कैसे df[rep(seq_len(nrow(df)), df$count), 1:2]:?
chl

@chl, आप सर शानदार हैं!
क्रिस

15

आप रीसेट पैकेज से अप्राप्य फ़ंक्शन का उपयोग कर सकते हैं।

उपरोक्त डीएफ को देखते हुए (@ गेल लॉरेंस द्वारा)

library(reshape)

expanded<-untable(df[,c(1,2)], num=df[,3])

name group
1   Person 1     A
1.1 Person 1     A
1.2 Person 1     A
2   Person 2     A
4   Person 1     B
4.1 Person 1     B
4.2 Person 1     B
4.3 Person 1     B
4.4 Person 1     B
6   Person 3     B

untableवास्तव में मैंने अपनी टिप्पणी में जो उल्लेख किया है :-) मुझे उस समारोह की याद दिलाने के लिए धन्यवाद!
२४:१२

1

और अब uncountसे tidyrऊपर के रूप में एक ही परिणाम देता है।

library(tidyr)
df %>% uncount(Count)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.