Jak odtworzyć data.frame
, którą przetopiłem za pomocą reshape2
?Łatwiejszy sposób odtworzenia stopionej ramki danych z powrotem do oryginału
Powtarzalne przykład
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
Co Próbowałem z dcast
dcast(df, Species~variable, value.var = "value")
# should work but doesn't
rozwiązania tymczasowego
# 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)
})
Czego mi brakuje? Jest to coś oczywistego, ale nie mogę znaleźć odpowiedzi. Mogłem nawet odpowiedzieć na to pytanie jeszcze przed kimś innym. argh.
Na podstawie wyników próby, myślę, że być może chciałeś użyć 'id.vars', a nie' measure.vars'. Zwróć też uwagę na literówkę w wywołaniu topnienia, która może być domyślna dla wyjścia, które widzisz. –
Tak, złapałeś mój błąd. Dzięki @RicardoSaporta – Maiasaura
Problem polega na tym, że twoja kombinacja zmiennych * nie jednoznacznie identyfikuje wiersz * (ponieważ masz wiele wartości dla każdej kombinacji.W tym przypadku będziesz musiał użyć 'fun.aggregate'. Sprawdź' zabawę. wyjaśnienie agregacji z '? dcast'. Może alternatywą jest użycie' unstack (df, value ~ variable) ', a następnie' cbind' "Gatunek" do tego wyniku ..? – Arun