2016-08-17 2 views
-2

I einen Datenrahmen mit 3 Spalten (Tier, Var1, Var2) und 3 Reihen (1 jeweils für Maus, Katze und Hund) haben:lang breit in r mit allen Daten und einzigartigen Beobachtungs Etikett in R

Animal Var1 Var2 
Mouse 5  5.5 
Cat  7  7.4 
Dog  1  6.3 

ich möchte es so aussehen:

Mouse.Var1 Mouse.Var2 Cat.Var1 Cat.Var2 Dog.Var1 Dog.Var2 
5   5.5  7  7.4  1  6.3 

ich habe reshape und reshape2 zu verwenden versucht, aber keiner scheint zu funktionieren. Bitte helfen.

+0

"keiner scheint zu funktionieren" ... was genau hast du probiert? Hast du die Dokumentation gelesen? –

+0

dcast (df, c ("Var1", "Var2"), Wert = "Animall"). Ja, ich habe die Dokumentation gelesen. – user3651829

Antwort

0

Dies kann in der Tat mit dem reshape2 Paket getan werden (obwohl ich nicht sicher bin, warum Sie wollen). Zuerst müssen Sie die Daten schmelzen, so dass die Var1 und Var2 Spalten Etiketten in einer verkürzten Spalte werden

library(reshape2) 

df <- data.frame(Animal = c('Mouse', 'Cat', 'Dog'), Var1 = c(5, 7, 1), Var2 = c(5.5, 7.4, 6.3)) 
df.melt <- melt(df, id.vars = 'Animal') 

Dies erzeugt:

Animal variable value 
1 Mouse  Var1 5.0 
2 Cat  Var1 7.0 
3 Dog  Var1 1.0 
4 Mouse  Var2 5.5 
5 Cat  Var2 7.4 
6 Dog  Var2 6.3 

Dies kann dann zu dem sind Sie nach Format gegossen werden:

df.wide <- dcast(df.melt, . ~ Animal + variable) 

    . Cat_Var1 Cat_Var2 Dog_Var1 Dog_Var2 Mouse_Var1 Mouse_Var2 
1 .  7  7.4  1  6.3   5  5.5 
+0

Anders als der seltsame Punkt, der erscheint, ist es großartig. – user3651829

+0

Der Punkt erscheint, weil Sie etwas auf der linken Seite der'cast'-Formel benötigen. Sie können auch einen Namen in Anführungszeichen eingeben, z. B. "Wert", der nicht unbedingt hübscher ist, aber mehr Sinn ergibt. – jdobres