2016-04-06 11 views
1

Ich versuche, einen Datenrahmen von "Wide" -Format zu "Long" -Format in R zu schmelzen, mit der Funktion 'schmelzen' im Paket 'reshape2'. Allerdings habe ich ein Problem mit Dimensionen, wenn ich versuche, den Ausgabedatenrahmen zu sehen, bei dem ich Schwierigkeiten habe zu entziffern. Hier ein Beispiel:Dimension Mismatch mit Schmelze() in reshape2

# load reshape2 package 
require(reshape2) 

# sample data frame generated using dput 
df <- structure(list(year = c(2001, 2002, 2003, 2004), 
        aet = structure(c(493.1, 407.1, 476.7, 501.6), .Dim = 4L), 
        drainage = structure(c(5.4, 5.4, 5.4, 5.4), .Dim = 4L), 
        srunoff = structure(c(25.6, 24.3, 56.0, 50.3), .Dim = 4L)), 
       .Names = c("year", "aet", "drainage", "srunoff"), row.names = c(NA, 4L), class = "data.frame") 

# if i melt without specifying id.vars, it provides a warning but works works fine 
df.melt <- melt(df) 

# check output 
head(df.melt) 

# view output 
View(df.melt) 
# this works fine, and the data frame is visible in RStudio 

# now, melt while supplying year as an id variable 
df.melt.id <- melt(df, id.vars="year") 

# check output 
head(df.melt.id) 
# the first 6 lines of output print to the console menu, as normal 

# view output 
View(df.melt.id) 

Allerdings, wenn ich versuche, den df.melt.id Datenrahmen zu sehen, bekomme ich folgende Fehlermeldung:

Error in FUN(X[[i]], ...) : 
    dims [product 4] do not match the length of object [12] 

4 entspricht die ursprüngliche Länge der Daten Rahmen und 12 ist wie lange es sein sollte. Wenn ich die Maße unter Verwendung dim(df.melt.id) überprüfe, gibt es die passende Größe zurück: [1] 12 3

Irgendwelche Ideen auf, was hier geschieht? Ich habe versucht, reshape2 neu zu installieren und das hat nicht geholfen ...

+0

Wenn Sie an der 'str aussehen (df.melt.id)', irgendwie Die Spalte "Wert" wurde zu einem Array. Wenn Sie es auf numerisch erzwingen, ist es in Ordnung, aber das Verhalten scheint ziemlich fehlerhaft. – alistaire

+1

Es ist eine 'Umgestaltung2' Sache; 'reshape :: melt.data.frame' funktioniert gut. – alistaire

+0

Seltsam! Ja, "reshape" funktioniert sowohl in diesem Beispiel als auch in meinem ursprünglichen, größeren Datenrahmen. Danke für die schnelle Hilfe. –

Antwort

1

Es arbeitet mit reshape2 wenn Sie dies tun:

df.melt.id <- as.data.frame.array(melt(df, id="year"))