2017-08-16 24 views
-2

Ich habe einen Datenrahmen wie folgt.Konvertieren von Zeilen in Spalten für einen Datenrahmen in R

Date   Time  Object_Name Object_Value 
7/28/2017 8:00  A1    58.56 
7/28/2017 8:00  A2    51.66 
. 
. 
. 
7/28/2017 8:30  A1    60.2 
7/28/2017 8:30  A2    65.2 

Ich brauche es wie folgt umgewandelt werden:

Date   Time  A1  A2 
7/28/2017 8:00  58.5  51.6 
7/28/2017 8:30  60.2  65.2 

Antwort

0

Versuchen

library(reshape2) 
df 
     Date Time Object_Name Object_Value 
1 7/28/2017 8:00   A1  58.56 
2 7/28/2017 8:00   A2  51.66 
3 7/28/2017 8:30   A1  60.20 
4 7/28/2017 8:30   A2  65.20 

dcast(df, Date + Time ~ Object_Name) 

     Date Time A1 A2 
1 7/28/2017 8:00 58.56 51.66 
2 7/28/2017 8:30 60.20 65.20 

Alternativ

library(tidyr) 
spread(df, Object_Name, Object_Value) 
     Date Time A1 A2 
1 7/28/2017 8:00 58.56 51.66 
2 7/28/2017 8:30 60.20 65.20 

den Kommentar zu adressieren, die oben funktioniert gut, wenn Sie haben einzigartige Fälle. Betrachten Sie zum Beispiel die folgenden:

df 
     Date Time Object_Name Object_Value 
1 7/28/2017 8:00   A1  58.56 
2 7/28/2017 8:00   A1  50.00 
3 7/28/2017 8:00   A2  51.66 
4 7/28/2017 8:30   A1  60.20 
5 7/28/2017 8:30   A2  65.20 

Blick auf die ersten beiden Zeilen, und Sie können, dass für das gleiche Datum, Uhrzeit und Object_Name sehen, haben wir zwei Werte. Dies bedeutet, dass dcast nicht weiß, was zu tun ist und gibt folgende Warnung: Aggregation function missing: defaulting to length. Wir können das umgehen, indem wir die Aggregationsfunktion angeben. Zum Beispiel wollen wir den Mittelwert dieser Werte annehmen:

dcast(df, Date + Time ~ Object_Name, fun.aggregate = mean) 
     Date Time A1 A2 
1 7/28/2017 8:00 54.28 51.66 
2 7/28/2017 8:30 60.20 65.20 
+0

Ich bin Werte als 0 und 1 bekommen, sollte ich ausdrücklich für object_Value angeben? – Anagha

+0

Warnung: Aggregationsfunktion fehlt: Standard auf Länge. und alle Werte sind 0 und 1 – Anagha

+0

Könnte der Downvoter bitte den Downvote erklären? – coffeinjunky

Verwandte Themen