繁体   English   中英

找出两个系列之间的时间差

[英]Find the time lag between two series

我试图找到两个系列之间的滞后。 假设有一个变量temp2,其值滞后于temp1,其中滞后不是恒定的。

library(data.table)

dt <- data.table(
    datetime = seq(as.POSIXct("2000-01-01 00:00:00"),as.POSIXct("2000-01-01 09:00:00"), by = "1 hour"),
    temp1 = seq(30, 21, by = -1),
    temp2 = c(30, seq(30, 25, by = -1), seq(25, 23, by = -1))
)

我想要一个额外的列“ lag”,等于“ temp1”和“ temp2”之间的延迟,以便结果看起来像这样:

dt <- data.table(
    datetime = seq(as.POSIXct("2000-01-01 00:00:00"),as.POSIXct("2000-01-01 09:00:00"), by = "1 hour"),
    temp1 = seq(30, 21, by = -1),
    temp2 = c(30, seq(30, 25, by = -1), seq(25, 23, by = -1)),
    lag = c(0, 1, 1, 1, 1, 1, 2, 2, NA, NA)
)

谢谢您的帮助 :)

1)减法如果简单的减法就足够了,那么:

library(data.table)

dt[, lag := temp2 - temp1]

给予:

> dt
               datetime temp1 temp2 lag
 1: 2000-01-01 00:00:00    30    30   0
 2: 2000-01-01 01:00:00    29    30   1
 3: 2000-01-01 02:00:00    28    29   1
 4: 2000-01-01 03:00:00    27    28   1
 5: 2000-01-01 04:00:00    26    27   1
 6: 2000-01-01 05:00:00    25    26   1
 7: 2000-01-01 06:00:00    24    25   1
 8: 2000-01-01 07:00:00    23    25   2
 9: 2000-01-01 08:00:00    22    24   2
10: 2000-01-01 09:00:00    21    23   2

2)dtw另一种可能性是动态时间扭曲。 您可能需要根据需要使用不同的参数来自定义此参数,但是请尝试以下操作:

library(data.table)
library(dtw)

fm <- dt[, dtw(temp1, temp2)]
dt[, lag := tapply(fm$index2 - fm$index1, fm$index1, min)]

给予:

> dt
               datetime temp1 temp2 lag
 1: 2000-01-01 00:00:00    30    30   0
 2: 2000-01-01 01:00:00    29    30   1
 3: 2000-01-01 02:00:00    28    29   1
 4: 2000-01-01 03:00:00    27    28   1
 5: 2000-01-01 04:00:00    26    27   1
 6: 2000-01-01 05:00:00    25    26   1
 7: 2000-01-01 06:00:00    24    25   2
 8: 2000-01-01 07:00:00    23    25   2
 9: 2000-01-01 08:00:00    22    24   1
10: 2000-01-01 09:00:00    21    23   0

注意: ccf函数在这里也可能有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM