2016-05-27 13 views
0

Ich bin relativ neu in R. Ich arbeite mit einem Dataset, das mehrere Datenpunkte pro Zeitstempel hat, aber sie sind in mehreren Zeilen. Ich versuche, eine einzelne Zeile für jeden Zeitstempel mit Spalten für jede Variable zu erstellen.Reduzieren mehrerer Zeilen auf 1 durch Index in R

Beispiel Dataset

Time Variable Value 
10  Speed  10 
10  Acc   -2 
10  Energy  10 
15  Speed  9 
15  Acc   -1 
20  Speed  9 
20  Acc   0 
20  Energy  2 

ich diese

Time Speed Acc Energy 
10  10  -2  10 
15  9  -1  (blank or N/A) 
20  8   0  2 

diese

möchten konvertieren Werte gemessen, so dass sie nicht immer vollständig sind.

Ich habe ddply versucht, jeden einzelnen Wert in ein Array zu extrahieren und neu zu kombinieren, aber die Spalten sind unterschiedlich lang. Ich habe versucht, aggregiert, aber ich kann nicht herausfinden, wie man die Variable und den Wert verknüpft hält. Ich weiß, dass ich das mit einer for-Schleife-Lösung machen könnte, aber das scheint ein schlechter Weg, dies in R zu tun. Jeder Rat oder jede Anweisung würde helfen. Vielen Dank!

Antwort

0

Ich gehe davon aus data.frame Name ist df

library(tidyr) 
spread(df,Variable,Value) 
0

Regel ein Job für dcast in reshape2 .First, wir Ihr Beispiel reproducible machen:

df <- structure(list(Time = c(10L, 10L, 10L, 15L, 15L, 20L, 20L, 20L),  
Variable = structure(c(3L, 1L, 2L, 3L, 1L, 3L, 1L, 2L), .Label = c("Acc", 
"Energy", "Speed"), class = "factor"), Value = c(10L, -2L, 10L, 
9L, -1L, 9L, 0L, 2L)), .Names = c("Time", "Variable", "Value"), 
class = "data.frame", row.names = c(NA, -8L)) 

Dann:

library(reshape2) 
dcast(df, Time ~ ...) 

Time Acc Energy Speed 
10 -2  10 10 
15 -1  NA  9 
20 0  2  9 

Mit dplyr können Sie (Kosmetik) die Farbe neu ordnen mns mit:

library(dplyr) 
dcast(df, Time ~ ...) %>% select(Time, Speed, Acc, Energy) 
Time Speed Acc Energy 
10 10 -2  10 
15  9 -1  NA 
20  9 0  2 
+0

Diese Methode funktioniert gut. Ich hatte zuerst Probleme damit, weil es eine andere Spalte "Date" als Spaltennamen verwendete. Ich habe dcast (df, Time + Date ~ ...) benutzt und es hat funktioniert. Danke, dass Sie sich die Zeit genommen haben, zu antworten. Ich werde in Zukunft reproduzierbare Beispiele verwenden. – Jakemcp