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

如何在R语言中生成同一列内两个日期间的日期序列

生成日期序列的R脚本解决方案

我完全懂你要实现的需求——基于输入表格里的请求ID、序列ID对应的起止日期,生成两个日期之间所有日期的行,同时保留对应状态对吧?下面我用tidyverse工具包来帮你搞定这个任务,步骤清晰好上手:

步骤1:准备模拟输入数据

先模拟和你描述结构一致的输入表格(这样你可以直接替换成自己的真实数据):

library(tidyverse)

# 模拟你的输入表格
input_df <- tibble(
  请求ID = c("REQ001", "REQ001", "REQ002"),
  序列ID = c(1, 2, 1),
  日期 = as.Date(c("2023-10-01", "2023-10-05", "2023-11-02")),
  状态 = c("已提交", "已完成", "处理中")
)

print(input_df)

输出的模拟输入大概是这样:

# A tibble: 3 × 4
  请求ID  序列ID 日期       状态  
  <chr>   <dbl> <date>     <chr> 
1 REQ001      1 2023-10-01 已提交
2 REQ001      2 2023-10-05 已完成
3 REQ002      1 2023-11-02 处理中

步骤2:生成完整日期序列并填充数据

核心逻辑是按请求ID分组,在每组内生成从最早到最晚日期的所有日期,再自动填充序列ID和状态:

output_df <- input_df %>%
  group_by(请求ID) %>%
  # 生成当前请求ID下的完整日期序列
  complete(日期 = seq.Date(min(日期), max(日期), by = "day")) %>%
  # 用前向填充把状态/序列ID补到中间日期行(直到遇到新的状态节点)
  fill(序列ID, 状态, .direction = "down") %>%
  ungroup()

print(output_df)

运行后就能得到你想要的目标表格:

# A tibble: 7 × 4
  请求ID  日期       序列ID 状态  
  <chr>   <date>     <dbl> <chr> 
1 REQ001  2023-10-01      1 已提交
2 REQ001  2023-10-02      1 已提交
3 REQ001  2023-10-03      1 已提交
4 REQ001  2023-10-04      1 已提交
5 REQ001  2023-10-05      2 已完成
6 REQ002  2023-11-02      1 处理中

小补充

  • 如果你的输入数据里同一个请求ID的日期是乱序的,记得在group_by之后加一行arrange(日期)排序,确保填充方向正确。
  • 要是还没装tidyverse,先运行install.packages("tidyverse")安装就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:13