Come ricreare uno data.frame
che ho fuso con reshape2
?Modo più semplice per ricostituire un frame di dati fuso indietro all'originale
esempio riproducibile
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
Quello che ho provato con dcast
dcast(df, Species~variable, value.var = "value")
# should work but doesn't
soluzione temporanea
# 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)
})
Cosa mi manca? È qualcosa di ovvio ma non riesco a capire la risposta. Potrei aver persino risposto per qualcun altro qui prima. Argh.
In base all'output di esempio, penso che potresti aver pensato di utilizzare 'id.vars' not' measure.vars'. Inoltre, noterai l'errore di battitura nella tua chiamata da fondere, che potrebbe essere l'impostazione predefinita per l'output che stai vedendo. –
Sì, hai capito il mio errore. Grazie @RicardoSaporta – Maiasaura
Il problema è che la combinazione di variabili * non identifica in modo univoco la riga * (poiché hai più valori per ogni combinazione. In questo caso dovrai usare 'divertimento.aggregare' .Controlla' divertente. spiegazione aggregata di '? dcast'. Forse un'alternativa è usare' unstack (df, value ~ variable) 'e quindi' cbind' "Species" a questo risultato ..? – Arun