首页 > 解决方案 > 找到时间序列的质心

问题描述

如何找到时间序列的质心?质心在水文学中用于查找降雨和径流之间的时间滞后。

质心也称为水位线的重心(按值加权的日期时间的平均值)。我举一个直观的例子来说明清楚。需要的最重要信息是质心的时间,在 08:29 以下的情​​况下。

质心用十字标记的水文线

有没有人知道如何计算这个?我将 xts 用于我的时间序列,但我可能可以转换。这是我的示例数据:

flow <- structure(c(0, 0.1, 1.21, 3.26, 5.54, 7.5, 9.12, 9.59, 9.41, 
                 8.82, 7.89, 6.74, 5.94, 5.3, 3.67, 3.06, 2.08, 1.46, 0.95, 0.54, 
                 0.13, 0.02, 0), .Dim = c(23L, 1L), index = structure(c(1156918500, 
                 1156919400, 1156920300, 1156921200, 1156922100, 1156923000, 1156923900, 
                 1156924800, 1156925700, 1156926600, 1156927500, 1156928400, 1156929300, 
                 1156930200, 1156931100, 1156932000, 1156932900, 1156933800, 1156934700, 
                 1156935600, 1156936500, 1156937400, 1156938300), tzone = "GMT", 
                 tclass = c("POSIXct", "POSIXt")), class = c("xts", "zoo"), 
                 .indexCLASS = c("POSIXct", "POSIXt"), 
                 tclass = c("POSIXct", "POSIXt"), .indexTZ = "GMT", tzone = "GMT", 
                 .Dimnames = list(NULL, structure("Flow", .Dim = c(1L, 1L))))

我找不到任何 R 代码来做到这一点,无论是在这里还是在谷歌的帮助下。

标签: r

解决方案


这是答案——感谢@pseudospin 和@g-grothendieck!

版本 1

as.POSIXct(sum(flow * attr(flow, 'index'))/sum(flow), origin = "1970-01-01")

版本 2

tt <- as.numeric(time(flow))
as.POSIXct(weighted.mean(tt, flow), origin = "1970-01-01")

推荐阅读