2016-10-19 3 views
0

Ich habe folgende Datenrahmen:Erstellen Sie eine Tabelle mit einer mittleren Dauer-mal pro Jahr und Typen

library("lubridate") 

df = data.frame(c("AAA","BBB","AAA"), 
       c("2012","2013","2012"), 
       c("2012-12-30 08:01:01","2013-12-30 09:05:02","2012-12-30 08:08:01"), 
       c("2012-12-30 09:01:00","2013-12-30 10:15:00","2012-12-30 08:11:01")) 
colnames(df) = c("type","year","start","end") 

df$duration = difftime(ymd_hms(df$end), ymd_hms(df$start),units="mins") 

Jetzt möchte ich eine Tabelle mit mittleren Laufzeiten zu schaffen, so dass es wie folgt aussehen:

 2012 2013 
AAA 31.49 0.00 
BBB 0.00 69.97 

Welche Funktionen sollte ich verwenden, um eine solche Tabelle zu erstellen?

Update:

Das ist, was ich versucht, aber wie kann ich hinzufügen year:

mean_duration_per_type_year = aggregate(duration~type, 
             data=df, 
             mean) 
+0

könnten Sie es mit der "Aggregat" -Funktion tun – etienne

+0

@etienne: Nicht sicher, warum die Frage nicht gestellt wurde. Jedenfalls habe ich meinen aktuellen Code geputscht. Ich benutze genau "Aggregat", aber ich habe Probleme mit dieser Funktion. – FiofanS

Antwort

0

hier, was Sie tun können, ist, mit der reshape2 Paket:

library(reshape2) 
temp <- aggregate(df$duration, by = list(type = df$type, year = df$year), mean) 
final <- dcast(temp, type~year) 
final[is.na(final)] <- 0 # optional : replace the NA values with 0 


final 
# type  2012  2013 
# 1 AAA 31.49167 0.00000 
# 2 BBB 0.00000 69.96667 

Beachten Sie, dass Sie die folgenden Zeilen hinzufügen können, wenn Sie möchten, dass der Typ die folgenden ist:

rownames(final) <- final$type 
final$type <- NULL 

final 
#   2012  2013 
# AAA 31.49167 0.00000 
# BBB 0.00000 69.96667 
Verwandte Themen