2013-04-07 20 views
5

पर पुनर्स्थापित करने का सरल तरीका मैं data.frame को फिर से कैसे बना सकता हूं जिसे मैंने reshape2 से पिघलाया?पिघला हुआ डेटा फ्रेम को मूल

प्रतिलिपि प्रस्तुत करने योग्य उदाहरण

library(reshape2) 
library(plyr) 
data(iris) 
df <- melt(iris, id.vars="Species") 
head(df) 
    Species  variable value 
1 setosa Sepal.Length 5.1 
2 setosa Sepal.Length 4.9 
3 setosa Sepal.Length 4.7 
4 setosa Sepal.Length 4.6 
5 setosa Sepal.Length 5.0 
6 setosa Sepal.Length 5.4 
# Great, I'd like to get the original iris back 

क्या मैं dcast

dcast(df, Species~variable, value.var = "value") 
    # should work but doesn't 

अस्थायी समाधान के साथ की कोशिश की है

# This works but clearly it shouldn't be this hard. 
ddply(df, .(Species), function(x) { 
    Species <- unique(x$Species) 
    x$id <- 1:dim(x)[1] 
    x$Species <- NULL 
    dat <- unstack(x, value~variable) 
    dat$Species <- Species 
    return(dat) 
    }) 

मुझे क्या याद आ रही है? यह कुछ स्पष्ट है लेकिन मैं जवाब नहीं समझ सकता। मैंने पहले यहां किसी और के लिए इसका उत्तर भी दिया होगा। अरे।

+0

आपके नमूना आउटपुट के आधार पर, मुझे लगता है कि आप 'id.vars' का उपयोग करने के लिए 'meas.vars' नहीं कर सकते हैं। साथ ही, पिघलने के लिए अपने कॉल में टाइपो को नोटिस करें जो आपके द्वारा देखे जा रहे आउटपुट के लिए डिफ़ॉल्ट हो सकता है। –

+0

हाँ, आपने मेरी गलती पकड़ी। धन्यवाद @ रिकार्डोस्पोर्टा – Maiasaura

+0

समस्या यह है कि चर के आपके संयोजन * विशिष्ट रूप से पंक्ति * की पहचान नहीं करते हैं (क्योंकि आपके पास प्रत्येक संयोजन के लिए कई मान हैं। इस मामले में, आपको 'fun.aggregate' का उपयोग करना होगा। 'मजेदार' जांचें। 'dcast' से कुल 'स्पष्टीकरण। शायद एक विकल्प' unstack (df, value ~ variable) 'और फिर' cbind' 'प्रजातियों का उपयोग इस परिणाम के लिए करना है ..? – Arun

उत्तर

6

आप इंगित करने के लिए जो मूल पंक्ति एक आइटम के अंतर्गत आता है मार्कर के कुछ फार्म जोड़ने है, तो यह आसान है:

require(reshape2) 
iris$rn <- seq_len(nrow(iris)) 
molten <- melt(iris, id.vars = c("Species", "rn")) 

# just a one-liner 
dcast(molten, rn + Species ~ variable) 

कठिनाई आप सामना कर रहे हैं करने के लिए कोई रास्ता नहीं है कि वहाँ है पहचानें कि कौन सी चीजें एक साथ जाती हैं। पिघला हुआ सेट 1 पंक्ति में 1: 5 पंक्तियां हैं? या यह 2: 6 है और 1 गुम हो गया है? पिघला हुआ डेटा वास्तव में पिघला हुआ है :)