आर

2012-11-28 24 views
5

में एक कॉलम में डेटा.फ्रेम में स्तंभों को ढेर करना मुझे एक कॉलम में डेटा.फ्रेम में स्तंभों को ढेर करने में समस्या हो रही है।आर

id time black white red 
a  1  b1  w1  r1 
a  2  b2  w2  r2 
a  3  b3  w3  r3 
b  1  b4  w4  r4 
b  2  b5  w5  r5 
b  3  b6  w6  r6 

मैं data.frame को बदलने के लिए इतना है कि यह इस तरह दिखता है कोशिश कर रहा हूँ:

id time colour 
a  1  b1 
a  2  b2 
a  3  b3 
b  1  b4 
b  2  b5 
b  3  b6 
a  1  w1 
a  2  w2 
a  3  w3 
b  1  w4 
b  2  w5 
b  3  w6 
a  1  r1 
a  2  r2 
.  .  . 
.  .  . 
.  .  . 

मेरा अनुमान है कि इस समस्या का उपयोग कर की आवश्यकता है कि अब मेरी डेटा इस तरह दिखता है पैकेज को दोबारा बदलें, लेकिन मुझे बिल्कुल यकीन नहीं है कि एक कॉलम के तहत एकाधिक कॉलम को ढेर करने के लिए इसका उपयोग कैसे किया जाए। क्या कोई इस पर सहायता प्रदान कर सकता है?

+0

आप या 'reshape' में' melt' के लिए मदद को देखा है (अधिक uptodate 'reshape2' पैकेज – mnel

उत्तर

9

यहाँ आकृति बदलें से पिघल रहा है:

library(reshape) 
melt(x, id.vars=c('id', 'time'),var='color') 

और reshape2 का उपयोग कर (reshape की एक अप-टू-डेट, तेजी संस्करण) वाक्य रचना लगभग समान है।

सहायता फ़ाइलों में उपयोगी उदाहरण हैं (?melt और melt.data.frame का लिंक देखें)।

आपके मामले में, निम्नलिखित की तरह कुछ काम करेंगे (यह मानते हुए अपने data.frame DF कहा जाता है)

library(reshape2) 
melt(DF, id.var = c('id','time'), variable.name = 'colour') 
+0

संबंधित प्रश्न:। वहाँ melt.data.frame उपयोग करने के लिए के सभी स्तंभों ढेर के लिए एक रास्ता है एक data.frame? id.vars = c() काम कर रहा है? – gvrocha

+0

@gvrocha वास्तव में ऐसा करता है। ध्यान दें कि 'c()' की आपूर्ति विकल्प की आपूर्ति से अलग नहीं है। 'melt'' के "विवरण" अनुभाग देखें –

5

चूंकि आप अपने शीर्षक में "स्टैकिंग" का उल्लेख है, तो आप भी stack समारोह देख सकते हैं आधार आर:

cbind(mydf[1:2], stack(mydf[3:5])) 
# id time values ind 
# 1 a 1  b1 black 
# 2 a 2  b2 black 
# 3 a 3  b3 black 
# 4 b 1  b4 black 
# 5 b 2  b5 black 
# 6 b 3  b6 black 
# 7 a 1  w1 white 
# 8 a 2  w2 white 
# 9 a 3  w3 white 
# 10 b 1  w4 white 
# 11 b 2  w5 white 
# 12 b 3  w6 white 
# 13 a 1  r1 red 
# 14 a 2  r2 red 
# 15 a 3  r3 red 
# 16 b 1  r4 red 
# 17 b 2  r5 red 
# 18 b 3  r6 red 

हैं में मूल्यों "काला", "सफेद", और "लाल" कॉलम factor रों हैं, तो आप उन्हें character मूल्यों के लिए सबसे पहले बदलने की आवश्यकता होगी।

cbind(mydf[1:2], stack(lapply(mydf[3:5], as.character))) 
+0

मुझे सभी कॉलम को 2-कॉल डेटाफ़्रेम में ढेर करने और आपके समाधान के काम करने की आवश्यकता है। धन्यवाद। – phusion