[英]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$Timestamp
和df2$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.