2016-04-15 58 views
0

我正在嘗試聚合季度小時數據,但我收到錯誤消息無效類型(列表)。該列表是POSIXlt列表,我之前彙總了每小時和每小時的數據,但我從未見過此錯誤。我是否需要將列表轉換爲其他類型,如果是這樣,我仍然可以提取15分鐘的數據嗎?這裏是我的代碼,我會很感激的任何幫助:聚合R POSIXlt列表的難度:無效的類型列表錯誤消息

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

您可以發佈一些複製此錯誤的數據示例嗎? http://stackoverflow.com/help/mcve – lmo

+0

你想'as.POSIXct'在哪裏使用'as.POSIXlt'。 –

回答

0

POSIXlt是一個列表類型,使用POSIXct代替:

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

謝謝你。我知道這將是一個簡單的解決方案,我想我現在終於明白了POSIXct和POSIXlt之間的區別。 – alkey

0

這是通過您的QTR表達裝箱數據替代。它使用seq.Date和cut命令。它比分割和倍數更直接:

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) 

對於如何定義分箱的差異,結果會有輕微的變化。要使用5分鐘的窗口更正此情況,請將seq_start時間更改爲2分鐘:

QTR= seq(trunc(seq_start-(2*60), units='mins'), by='5 mins',length = 14) 
相關問題