2016-04-15 36 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) 
相关问题