我有两个 Dataframe 要合并,它们必须基于某个ID
的最接近的timestamp
进行连接,如果时间差低于特定值因此,对于给定ID,df1
中的每个timestamp
需要与df2
中最接近的timestamp
匹配。如果时间差超过某个值,应该是NA
。我尝试了多种方法将它们结合使用sqldf
和nearestTimeandID
,但似乎不成功。任何帮助都将不胜感激。
数据如下所示:
# dput(head(df1))
structure(list(timestamp = structure(c(1660048051, 1660049817,
1660051642, 1660053416, 1660055228, 1660057017), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), location_long = c(2.7305546, 2.730441,
2.7301144, 2.732173, 2.7319352, 2.7319432), location_lat = c(51.1519968,
51.1520704, 51.1519392, 51.1509984, 51.1511456, 51.1511168),
ID = c("16000002ba", "16000002ba", "16000002ba", "16000002ba",
"16000002ba", "16000002ba")), row.names = c("1.1", "1.2",
"1.3", "1.4", "1.5", "1.6"), class = "data.frame")
# dput(head(df2))
structure(list(ID = c("16000002ba", "16000002ba", "16000002ba",
"16000002ba", "16000002ba", "16000002ba"), Collecting_time = c("2022-08-07 23:59:05 UTC",
"2022-08-08 00:00:03 UTC", "2022-08-08 00:30:39 UTC", "2022-08-08 01:00:16 UTC",
"2022-08-08 01:30:51 UTC", "2022-08-08 02:00:25 UTC"), ODBA = c(110L,
290L, 260L, 220L, 210L, 410L)), row.names = 290345:290350, class = "data.frame")
2条答案
按热度按时间gev0vcfq1#
我们可以使用{powerjoin}包,并使用公式指定
by
参数。我也编辑了df1
的第一个条目,以获得至少一个连接。我建议使用df2
,这样我们实际上就有了一个日期时间对象。我不确定时间间隔是+/- 10分钟还是只小于10分钟,下面我应用了后者,但你可以玩周围的设置。
数据来自OP
创建于2023年3月13日,使用reprex v2.0.2
ujv3wf0j2#
我不确定我是否正确地理解了你的意思。但也许这会有所帮助。注意我编辑了df2的第一个条目以获得实际的匹配。