繁体   English   中英

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

[英]Find closest timestamps between two dataframes and merge different columns when time difference is < 60s

我需要根据最接近的时间戳合并两个数据帧,时间戳之间的最大差异为 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 秒的情况下。

理想情况下,output 将是:

>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

暂无
暂无

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

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