比较 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 Value2
2014-01-01 13
2014-01-19 76
2014-01-23 8

所需的输出: df_fused:

日期 1 值1 Value2
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

解决方法

这是一个 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" ),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