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

编写R函数查找BD与OD数据集符合指定条件的TF_PP差值记录

以下是符合需求的R函数实现,分别提供tidyverse(易读性优先)和data.table(大数据量性能优先)两种版本:


tidyverse 实现版本

适合中小规模数据集,语法清晰易维护:

library(dplyr)

match_od_bd <- function(od_data, bd_data, diff_threshold = 2000) {
  # 先解除OD的原有分组,避免关联计算异常
  od_clean <- od_data %>% ungroup()
  
  # 按出发日期关联两张表,过滤符合条件的记录
  result <- od_clean %>%
    left_join(bd_data, by = "Departure_date", suffix = c("_od", "_bd")) %>%
    filter(
      # 条件1:BD创建时间晚于对应OD的创建时间
      created_at_date_bd > created_at_date_od,
      # 条件2:TF_PP差值大于指定阈值
      TF_PP_od - TF_PP_bd > diff_threshold
    ) %>%
    # 计算差值字段
    mutate(Diff = TF_PP_od - TF_PP_bd) %>%
    # 按需求重命名并筛选返回列
    select(
      Order_ID,
      Dep_Date = Departure_date,
      `OD(Created_at_Date)` = created_at_date_od,
      `OD_TF` = TF_PP_od,
      `BD(Created_at_Date)` = created_at_date_bd,
      `BD_TF` = TF_PP_bd,
      Diff
    )
  
  return(result)
}

# 调用示例
output <- match_od_bd(OD, BD)

data.table 实现版本

适合百万级以上大规模数据集,执行效率更高:

library(data.table)

# 先将数据集转换为data.table格式
setDT(OD)
setDT(BD)

match_od_bd_dt <- function(od_dt, bd_dt, diff_threshold = 2000) {
  result <- bd_dt[
      # 按出发日期关联两张表
      od_dt, on = .(Departure_date), allow.cartesian = TRUE
    ][
      # 过滤符合条件的记录
      created_at_date > i.created_at_date & i.TF_PP - TF_PP > diff_threshold
    ][
      # 计算衍生字段并重命名
      , `:=`(
        Diff = i.TF_PP - TF_PP,
        `OD(Created_at_Date)` = i.created_at_date,
        OD_TF = i.TF_PP,
        `BD(Created_at_Date)` = created_at_date,
        BD_TF = TF_PP,
        Dep_Date = Departure_date
      )
    ][
      # 筛选输出需要的列
      , .(Order_ID, Dep_Date, `OD(Created_at_Date)`, OD_TF, `BD(Created_at_Date)`, BD_TF, Diff)
    ]
  return(result)
}

# 调用示例
output_dt <- match_od_bd_dt(OD, BD)

说明

你提供的示例测试数据中,BD和OD的TF_PP差值均未达到2000,调用函数后返回空结果属于正常情况,替换为全量业务数据即可得到符合预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:09:02