2016-04-15 5 views
0

Ich versuche, vierteljährliche Stunden Daten zu sammeln, aber ich bekomme die Fehlermeldung ungültiger Typ (Liste). Die Liste ist eine POSIXlt-Liste, und ich habe schon sehr kleine und stündliche Daten gesammelt, aber ich habe diesen Fehler nie zuvor gesehen. Muss ich die Liste in einen anderen Typ umwandeln, und wenn ja, könnte ich die 15min-Daten trotzdem extrahieren? Hier ist mein Code, würde ich wirklich schätzen jede Hilfe:Schwierigkeit aggregieren R POSIXlt Liste: Ungültige Typenliste Fehlermeldung

seq_start <- as.POSIXct("2015-09-10 01:00:00 BST") 

Arrivals <- floor(runif(60, min = 1, max = 14)) 
Minute_Seq <- seq(trunc(seq_start, units='mins'), by='1 mins',length = 60) 
Arrival_board = data.frame(Minute_Seq,Arrivals) 

Arrival_board$QTR= as.POSIXlt(round(as.double(Arrival_board$Minute_Seq)/(5*60))*(5*60),origin=(as.POSIXlt('1970-01-01'))) 
arrive_stats <- aggregate(Arrival_board$Arrivals ~ Arrival_board$QTR, Arrival_board, FUN=mean) 
+0

Können Sie einige Beispiele Ihrer Daten, die diesen Fehler replizieren? http://stackoverflow.com/help/mcve – lmo

+0

Sie wollen 'as.POSIXct', wo Sie' as.POSIXlt' verwenden. –

Antwort

0

POSIXlt eine Liste Typ ist, verwenden Sie POSIXct statt:

aggregate(Arrivals ~ QTR, transform(Arrival_board, QTR=as.POSIXct(QTR)), FUN=mean) 
+0

Vielen Dank dafür. Ich wusste, dass es eine einfache Lösung sein würde und ich denke, dass ich jetzt endlich den Unterschied zwischen POSIXct und POSIXlt verstehe. – alkey

0

hier eine Alternative ist Ihre Daten über Ihren QTR Ausdruck Binning. Es verwendet den Befehl seq.Date und cut. Es ist gerade nach vorne als divide rund und mehrere:

seq_start <- as.POSIXct("2015-09-10 01:00:00 BST") 
Arrivals <- floor(runif(60, min = 1, max = 14)) 
Minute_Seq <- seq(trunc(seq_start, units='mins'), by='1 mins',length = 60) 
Arrival_board = data.frame(Minute_Seq,Arrivals) 

QTR= seq(trunc(seq_start, units='mins'), by='5 mins',length = 13) 
Arrival_board$QTR = cut(Arrival_board$Minute_Seq,QTR) 

arrive_stats <- aggregate(Arrival_board$Arrivals ~ QTR, Arrival_board, FUN=mean) 

auf die Unterschiede auf Sie, wie die Behälter definiert es leichte Verschiebung wird in den Ergebnissen. Um diesen Fall mit einem 5-Minuten-Fenster zu korrigieren, ändern Sie die Seq_Start-Zeit um 2 Minuten:

QTR= seq(trunc(seq_start-(2*60), units='mins'), by='5 mins',length = 14) 
Verwandte Themen