2014-09-19 12 views
12

के साथ डेटा को "अनमेट" कैसे करें मेरे पास एक डेटा फ्रेम है जिसे मैंने रीशेप पैकेज का उपयोग करके पिघल दिया है जिसे मैं "अन पिघलाना" चाहता हूं।reshape r

यहाँ पिघल डेटा की एक खिलौना उदाहरण है (वास्तविक डेटा फ्रेम 500x100 या बड़ा है):

variable<-c(rep("X1",3),rep("X2",3),rep("X3",3)) 
value<-c(rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3)) 
dat <-data.frame(variable,value) 
dat 
variable  value 
1  X1 0.5285376 
2  X1 0.5285376 
3  X1 0.5285376 
4  X2 0.1694908 
5  X2 0.1694908 
6  X2 0.1694908 
7  X3 0.7446906 
8  X3 0.7446906 
9  X3 0.7446906 

प्रत्येक चर (x1, x2, X3) मान 3 अलग अलग समय पर अनुमान है (जो इस में खिलौना उदाहरण समान होता है, लेकिन यह कभी भी मामला नहीं है)।

मैं इसे (वापस) के रूप में प्राप्त करना चाहते हैं:

 X1  X2  X3 
1 0.5285376 0.1694908 0.7446906 
2 0.5285376 0.1694908 0.7446906 
3 0.5285376 0.1694908 0.7446906 

असल में, मैं चर स्तंभ आईडी (x1, x2 आदि) पर क्रमबद्ध करना चाहते और स्तंभ शीर्षकों बन जाएगा। मैंने कास्ट, डकास्ट, रिकस्ट इत्यादि के विभिन्न क्रमिक प्रयासों की कोशिश की है .. और मुझे लगता है कि प्रारूप में डेटा प्राप्त नहीं कर सकता है। व्यापक रूप से लंबे प्रारूप तक डेटा पिघलने के लिए काफी आसान था (उदाहरण के लिए डेटा डेटासेट), लेकिन इसे वापस लेना मुश्किल साबित हो रहा है। कोई विचार? मुझे पता है कि यह अपेक्षाकृत सरल है, लेकिन मुझे संकल्प करने में कठिनाई हो रही है कि इसे रीशेप या रीशेप 2 में कैसे किया जाए।

धन्यवाद, एल.पी.

+0

यह क्योंकि आपके पिघल डेटा में यहाँ एक छोटे से मुश्किल है आप जानकारी जो पंक्ति के बारे में उस में मूल रूप से किया गया था खो दिया है, जो कि कम तीन बार की यह अनुमान लगाया गया था है। यदि आप यह मानने के इच्छुक हैं कि यह हमेशा क्रमशः 1-2-3 था (या 1-2, यदि केवल दो हैं), तो आप उस जानकारी के साथ एक पंक्ति बना सकते हैं और फिर इसे वापस ला सकते हैं। – Aaron

उत्तर

19

मैं आम तौर पर एक आईडी स्तंभ बनाने और फिर dcast उपयोग करके ऐसा कर:

> dat 
    variable  value 
1  X1 0.4299397 
2  X1 0.4299397 
3  X1 0.4299397 
4  X2 0.2531551 
5  X2 0.2531551 
6  X2 0.2531551 
7  X3 0.3972119 
8  X3 0.3972119 
9  X3 0.3972119 
> dat$id <- rep(1:3,times = 3) 
> dcast(data = dat,formula = id~variable,fun.aggregate = sum,value.var = "value") 
    id  X1  X2  X3 
1 1 0.4299397 0.2531551 0.3972119 
2 2 0.4299397 0.2531551 0.3972119 
3 3 0.4299397 0.2531551 0.3972119 
+2

जैसा कि वे उल्लेख करते हैं कि मूल्यों की संख्या सुसंगत नहीं हो सकती है, हो सकता है कि आपके 'डेटा $ आईडी' को' जैसे (डेटा, एवी (रेप (1, एनरो (डेटा)), चर, FUN = seq_along) में बदलने पर विचार करें। '। – A5C1D2H2I1M1N2O1R2T1

+0

आह, धन्यवाद। मैं आईडी खो रहा था। यह इस विशेष डेटा सेट के लिए अच्छी तरह से काम करता है जो सिमुलेशन के माध्यम से उत्पन्न हुआ था। –

1

कैसे मजबूत आप इस होने की जरूरत के आधार पर, निम्नलिखित सही ढंग से अलग के लिए डाली जाएगा चर के घटनाओं की संख्या (और किसी भी क्रम में)।

> variable<-c(rep("X1",5),rep("X2",4),rep("X3",3)) 
> value<-c(rep(rnorm(1,.5,.2),5),rep(rnorm(1,.5,.2),4),rep(rnorm(1,.5,.2),3)) 
> dat <-data.frame(variable,value) 
> dat <- dat[order(rnorm(nrow(dat))),] 
> dat 
    variable  value 
11  X3 1.0294454 
8  X2 0.6147509 
2  X1 0.3537012 
7  X2 0.6147509 
9  X2 0.6147509 
5  X1 0.3537012 
4  X1 0.3537012 
12  X3 1.0294454 
3  X1 0.3537012 
1  X1 0.3537012 
10  X3 1.0294454 
6  X2 0.6147509 
> dat$id = numeric(nrow(dat)) 
> for (i in 1:nrow(dat)){ 
+ dat_temp <- dat[1:i,] 
+ dat[i,]$id <- nrow(dat_temp[dat_temp$variable == dat[i,]$variable,]) 
+ } 
> cast(dat, id~variable, value = 'value') 
    id  X1  X2  X3 
1 1 0.3537012 0.6147509 1.029445 
2 2 0.3537012 0.6147509 1.029445 
3 3 0.3537012 0.6147509 1.029445 
4 4 0.3537012 0.6147509  NA 
5 5 0.3537012  NA  NA