r - 在 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 |
解决方案
这是一种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
推荐阅读
- docker - Docker Linux 挂载代码是 RO
- express - 同一域上的 HTTPS 和 Websocket API 端点
- scala - 从 spark scala 中的数据集创建 json 文件
- swift - 为什么我的标签文本在重用注释视图时没有改变 mapkit swift 4
- reactjs - React/Webpack assets/bundle/app not found
- javascript - 如何在异步调用期间更新 DOM
- php - 为什么 Laravel 验证不起作用?
- c# - 'Home' 的请求找到了以下匹配的控制器:Test_Login.Controllers.HomeController BPF.Controllers.HomeController
- django - 如何返回带有文件内容的 HTTP 响应并重新呈现页面
- laravel - 使用干预 Laravel REST API 检索图像