什么是从数据帧中的带时间戳的行分区和聚合间隔的有效方法?
发布时间:2020-12-13 20:45:25 所属栏目:百科 来源:网络整理
导读:从带有时间戳行的数据框(strptime结果),聚合间隔统计数据的最佳方法是什么? 间隔可以是一小时,一天等. 有聚合函数,但这对于将每一行分配给一个区间没有帮助.我打算在数据框中添加一个表示间隔的列,并将其与聚合一起使用,但是如果有更好的解决方案,那么听到
从带有时间戳行的数据框(strptime结果),聚合间隔统计数据的最佳方法是什么?
间隔可以是一小时,一天等. 有聚合函数,但这对于将每一行分配给一个区间没有帮助.我打算在数据框中添加一个表示间隔的列,并将其与聚合一起使用,但是如果有更好的解决方案,那么听到它会很棒. 感谢您的任何指示! 示例数据 五行,时间戳从03:00开始分为15分钟. 间隔1 >“2010-01-13 03:02:38 UTC” 间隔2 >“2010-01-13 03:20:42 UTC” 结论 使用像xts这样的时间序列包应该是解决方案;但是我没有成功使用它们并且使用切割进行了缠绕.由于我目前只需绘制直方图,行按间隔分组,这就足够了. cut使用喜欢如此: interv <- function(x,start,period,num.intervals) { return(cut(x,as.POSIXlt(start)+0:num.intervals*period)) }
切割矢量的标准函数是cut和findInterval:
v <- as.POSIXct(c( "2010-01-13 03:02:38 UTC","2010-01-13 03:08:14 UTC","2010-01-13 03:14:52 UTC","2010-01-13 03:20:42 UTC","2010-01-13 03:22:19 UTC" )) # Your function return list: interv(v,as.POSIXlt("2010-01-13 03:00:00 UTC"),900) # [[1]] # [1] "2010-01-13 03:00:00" # [[2]] # [1] "2010-01-13 03:00:00" # [[3]] # [1] "2010-01-13 03:00:00" # [[4]] # [1] "2010-01-13 03:15:00 CET" # [[5]] # [1] "2010-01-13 03:15:00 CET" # cut returns factor,you must provide proper breaks: cut(v,as.POSIXlt("2010-01-13 03:00:00 UTC")+0:2*900) # [1] 2010-01-13 03:00:00 2010-01-13 03:00:00 2010-01-13 03:00:00 # [4] 2010-01-13 03:15:00 2010-01-13 03:15:00 # Levels: 2010-01-13 03:00:00 2010-01-13 03:15:00 # findInterval returns vector of interval id (breaks like in cut) findInterval(v,as.POSIXlt("2010-01-13 03:00:00 UTC")+0:2*900) # [1] 1 1 1 2 2 对于记录:cut有一个POSIXt类型的方法,但遗憾的是没有办法提供start参数,效果是: cut(v,"15 min") # [1] 2010-01-13 03:02:00 2010-01-13 03:02:00 2010-01-13 03:02:00 # [4] 2010-01-13 03:17:00 2010-01-13 03:17:00 # Levels: 2010-01-13 03:02:00 2010-01-13 03:17:00 如你所见,它的开始于03:02:00.您可能会混淆输出因子的标签(将标签转换为时间,以某种方式转换并转换回字符). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |