2013-04-07 21 views
5

reshape2 ile eritdiğim bir data.frame yeniden nasıl oluşturulur?Erimiş bir veri çerçevesini yeniden oluşturmanın daha kolay yolu özgün

tekrarlanabilir örnek

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 

Ben dcast

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

geçici çözüm ile denedim ne

# 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) 
    }) 

Neyi özlüyorum? Bu açık bir şey ama cevabı çözemiyorum. Daha önce burada bir başkası için cevaplamış olabilirim. argh. Bir öğenin ait orijinal hangi satırı belirtmek için işaretleyici çeşit katmak Eğer

+0

Örnek çıktınıza bağlı olarak, 'id.vars' ölçüsü 'var' anlamına geleceğini sanmış olabilirsiniz. Ayrıca, göründüğünüz çıktıya varsayılan olabilecek erteleme çağrınızdaki yazım hatası farkedin. –

+0

Evet, benim hatamı yakaladın. Teşekkürler @RicardoSaporta – Maiasaura

+0

Sorun şu ki, değişkenler * kombinasyonunuz benzersiz bir şekilde satır * tanımlamıyor (her kombinasyon için birden fazla değer kullandığınız gibi. Bu durumda, fun.aggregate'i kullanmak zorundasınız. '' dcast '' topluluğunun açıklama 'Belki de bir alternatif' unstack (df, value ~ variable) 've sonra bu sonuca' cbind' 'Türler' kullanmaktır ..? – Arun

cevap

6

, o zaman kolaydır:

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) 

oluşuyor bir zorluk hiçbir şekilde orada olmasıdır Hangi maddelerin bir araya geldiğini tanımlayın. Erimiş sette 1: 5 satır bir satır mı? ya da 2: 6 ve 1 yanlış mı? Erimiş veriler aslında erimiş durumdadır.

İlgili konular