查找两个数据帧之间最接近的时间戳,并在时差小于 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$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
我需要根据最接近的时间戳合并两个数据帧,时间戳之间的最大差异为 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