r - 查找两个数据帧之间最接近的时间戳,并在时间差 < 60 秒时合并不同的列

标签 r merge timestamp closest

我需要根据最接近的时间戳合并两个数据帧,时间戳之间的最大差异为 60 秒。

例如:

library(lubridate)

df1 <- data.frame(Timestamp = ymd_hms(c("2020-01-01 00:00:00", 
                                        "2020-01-01 00:02:00", 
                                        "2020-01-01 00:04:00",
                                        "2020-01-01 00:06:00", 
                                        "2020-01-01 00:08:00", 
                                        "2020-01-01 00:10:00",
                                        "2020-01-01 00:12:00",
                                        "2020-01-01 00:14:00", 
                                        "2020-01-01 00:16:00")), 
                  Data  = c(1:9))

df2 <- data.frame(Timestamp = ymd_hms(c("2020-01-01 00:00:10", 
                                        "2020-01-01 00:02:30", 
                                        "2020-01-01 00:12:45",
                                        "2020-01-01 00:20:15")), 
                  Data  = c(10:13))

df1 中有以 2 分钟间隔采集的连续数据。 df2 中有零星数据。 数据集的行数不同。

我需要将 df1$Data 合并到 df2 中的新列 (df2$df1_Data),但仅限于时间差df1$Timestampdf2$Timestamp 小于 60 秒。

理想的输出是:

>df2
            Timestamp   Data    df1_Data
1 2020-01-01 00:00:10   10      1
2 2020-01-01 00:02:30   11      2
3 2020-01-01 00:12:45   12      7
4 2020-01-01 00:20:15   13      NA

我的 R 技能还没有达到我可以自己解决这个问题的水平,而且我没有找到关于这个具体问题的东西,有人愿意帮忙吗?非常感谢!

最佳答案

可以直接用sql表示:

library(sqldf)
sqldf("select a.*, b.Data df1_Data
  from df2 a
  left join df1 b on abs(a.Timestamp - b.Timestamp) < 60")

给予:

            Timestamp Data df1_Data
1 2019-12-31 19:00:10   10        1
2 2019-12-31 19:02:30   11        2
3 2019-12-31 19:12:45   12        7
4 2019-12-31 19:20:15   13       NA

关于r - 查找两个数据帧之间最接近的时间戳,并在时间差 < 60 秒时合并不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65267282/

相关文章:

Mysql - 从 unix 时间戳中选择年份

mysql - 如何仅获取过去 30 天内特定时段的数据

r - 如何找到乘以固定乘积的向量的所有可能组合?

css - Shiny 1.0.5 使 slider 输入与标签内联

来自数据库的 PHP 日期作为时间戳 - 添加 X 小时

git - 将存储库 merge 到经过修改的克隆中

python - 根据索引合并两个数据帧(一个从数据透视表创建的 df)

r - R 传奇中的小型大写字母?

R 数据表 - 将分组列添加到选定的数据中

Python:组合两个排序列表(并保持它们排序)而不使用内置排序