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

使用R语言dplyr按连续日期生成From/To配对

解决方案:基于dplyr生成分组内的日期顺序配对

问题背景

现有包含分组标识Unit、编码Type及发生日期DATE的数据集,示例数据如下:

df <- tibble::tibble(
  Type = c(
    "H08", "C42", "J02", "H03", "D44", "D05", "D81", "Q11", "S02",
    "Q04", "H81", "D06", "F08", "E82", "D03", "Q82", "Q13", "S01",
    "E05", "E10", "H01", "E82", "E01"
  ),
  Unit = c(
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
    "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B"
  ),
  DATE = as.Date(c(
    "2015-08-20", "2015-10-06", "2015-10-26", "2015-11-13", "2016-03-26",
    "2016-06-03", "2016-06-13", "2016-09-22", "2017-03-16", "2017-06-15",
    "2018-08-29", "2018-08-31", "2018-10-09", "2020-04-20", "2020-05-06",
    "2020-05-06", "2020-05-06", "2020-08-19", "2016-11-03", "2016-11-03",
    "2017-05-05", "2017-05-08", "2020-05-06"
  ))
)

需在每个Unit分组内按时间顺序生成From:To配对,满足两个规则:

  • 常规连续日期场景:生成依次衔接的配对(如A H08 C42、A C42 J02)
  • 同一日期存在多个Type时:生成跨日期的全量配对(如2020年数据中A E82 D03、A E82 Q82等)

实现代码

使用dplyr管道的完整实现如下:

library(dplyr)
library(tidyr)

result <- df %>%
  # 按Unit和DATE分组,将同日期的Type打包为列表
  group_by(Unit, DATE) %>%
  summarise(Type_list = list(Type), .groups = "drop_last") %>%
  # 按日期排序,保证时间顺序
  arrange(DATE) %>%
  # 获取下一个日期组的Type列表
  mutate(next_Type_list = lead(Type_list)) %>%
  # 过滤无后续组的行
  filter(!is.na(next_Type_list)) %>%
  # 逐行生成当前组与下一组的全量交叉配对
  rowwise() %>%
  reframe(
    From = rep(Type_list, each = length(next_Type_list)),
    To = rep(next_Type_list, length(Type_list))
  ) %>%
  ungroup()

代码说明

  1. 分组打包同日期Type:将同一Unit、同一DATE的所有Type存入列表,把同日期的多个Type视为一个整体组。
  2. 排序与匹配下一组:按DATE排序确保时间顺序,用lead()获取当前组的下一个日期组的Type列表。
  3. 生成交叉配对:通过rowwise()逐行处理,用reframe实现当前组每个Type与下一组每个Type的全量组合,自动生成符合要求的From:To配对。

结果验证

以Unit A的2020年相关配对为例:

result %>% filter(Unit == "A", From == "E82" | To == "S01")

输出结果与需求示例一致:

# A tibble: 6 × 3
  Unit  From  To   
  <chr> <chr> <chr>
1 A     E82   D03  
2 A     E82   Q82  
3 A     E82   Q13  
4 A     D03   S01  
5 A     Q82   S01  
6 A     Q13   S01  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:27:51