首页 > 解决方案 > 在 R 中比较具有不同采样率(日期)的时间序列

问题描述

我有两个很长的时间序列要比较,但是,它们的采样完全不同。第一个是每小时,第二个是不规则采样。我想比较 Value1 和 Value2,所以,我想根据 df2 日期在 02:00 从 df1 中选择 Value1 记录。我如何在 R 中解决它?

df1:

日期1 价值1
2014-01-01 01:00:00 0.16
2014-01-01 02:00:00 0.13
2014-01-01 03:00:00 0.6
2014-01-02 01:00:00 0.5
2014-01-02 02:00:00 0.22
2014-01-02 03:00:00 0.17
2014-01-19 01:00:00 0.2
2014-01-19 02:00:00 0.11
2014-01-19 03:00:00 0.15
2014-01-21 01:00:00 0.13
2014-01-21 02:00:00 0.33
2014-01-21 03:00:00 0.1
2014-01-23 01:00:00 0.09
2014-01-23 02:00:00 0.02
2014-01-23 03:00:00 0.16

df2:

日期2 价值2
2014-01-01 13
2014-01-19 76
2014-01-23 8

所需的输出:df_fused:

日期1 价值1 价值2
2014-01-01 02:00:00 0.13 13
2014-01-19 02:00:00 0.11 76
2014-01-23 02:00:00 0.02 8

标签: rdatetime-seriescomparisonresampling

解决方案


这是一种data.table方法

library( data.table )

#sample data can also be setDT(df1);setDT(df2)
df1 <- fread("Date1     Value1
2014-01-01 01:00:00     0.16
2014-01-01 02:00:00     0.13
2014-01-01 03:00:00     0.6
2014-01-02 01:00:00     0.5
2014-01-02 02:00:00     0.22
2014-01-02 03:00:00     0.17
2014-01-19 01:00:00     0.2
2014-01-19 02:00:00     0.11
2014-01-19 03:00:00     0.15
2014-01-21 01:00:00     0.13
2014-01-21 02:00:00     0.33
2014-01-21 03:00:00     0.1
2014-01-23 01:00:00     0.09
2014-01-23 02:00:00     0.02
2014-01-23 03:00:00     0.16")

df2 <- fread("Date2     Value2
2014-01-01  13
2014-01-19  76
2014-01-23  8")

#set dates to posix
df1[, Date1 := as.POSIXct( Date1, format = "%Y-%m-%d %H:%M:%S", tz = "UTC" )]
#set df2 dates to 02:00:00 time
df2[, Date2 := as.POSIXct( paste0( Date2, "02:00:00" ), format = "%Y-%m-%d %H:%M:%S", tz = "UTC" )]
#join
df2[ df1, Value1 := i.Value1, on = .(Date2 = Date1)][]

#         Date2 Value2 Value1
# 1: 2014-01-01 02:00:00     13   0.13
# 2: 2014-01-19 02:00:00     76   0.11
# 3: 2014-01-23 02:00:00      8   0.02

推荐阅读