我需要根据最接近的时间戳合并两个数据帧,时间戳之间的最大差异为 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 秒。
理想的输出是:
>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/