聚合R POSIXlt列表的难度:无效的类型列表错误消息

时间:2016-04-15 16:15:02

标签: r aggregate

我正在尝试聚合季度小时数据,但我收到错误消息无效类型(列表)。该列表是一个POSIXlt列表,我之前汇总了每分钟和每小时的数据,但我之前从未见过这个错误。我是否需要将列表转换为其他类型,如果是,我仍然可以提取15分钟的数据吗?这是我的代码,我真的很感激任何帮助:

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) 

2 个答案:

答案 0 :(得分:0)

POSIXlt是一种列表类型,请改用POSIXct

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

答案 1 :(得分: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)