You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选与另一DataFrame时间差在30分钟内的DataFrame行

解决方案

首先明确两个核心问题:

  • 直接按name做全连接会生成大量冗余行(同一name下的所有行两两配对),效率极低;
  • 若时间列是字符串格式,无法直接进行时间差运算,这也是报错的常见原因。

步骤1:转换时间列格式

先把A_time和B_time转换成R可识别的POSIXct时间类型,同时提取日期列用于按日期匹配:

library(dplyr)

dataframe1 <- dataframe1 %>%
  mutate(A_time = as.POSIXct(A_time, format = "%m/%d/%y %H:%M"),
         date = as.Date(A_time))

dataframe2 <- dataframe2 %>%
  mutate(B_time = as.POSIXct(B_time, format = "%m/%d/%y %H:%M"),
         date = as.Date(B_time))

步骤2:按name+日期+时间差模糊匹配

使用fuzzyjoin包的模糊连接,先按name和日期精确匹配缩小范围,再过滤时间差≤30分钟的行,比全连接后过滤效率高得多:

library(fuzzyjoin)

dataframe3 <- dataframe1 %>%
  fuzzy_inner_join(dataframe2,
                   by = c("name" = "name", "date" = "date"),
                   match_fun = list(`==`, `==`),
                   keep = FALSE) %>%
  filter(abs(difftime(A_time, B_time, units = "mins")) <= 30) %>%
  select(name, A_time, measurement_A, measurement_B) %>%
  arrange(name, A_time)

代码说明

  • fuzzy_inner_join先确保name和日期完全匹配,避免跨日期的无效配对;
  • difftime精准计算时间差并判断是否在30分钟内;
  • 最后筛选并整理目标列,得到与预期一致的结果。

内容的提问来源于stack exchange,提问作者ol1975

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:53:15