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

如何在R中基于日期列按ID拆分数据框为多行

解决R数据框按test_date拆分行并新增exposure列的需求

直接上可运行的代码,用你已经加载的dplyr、lubridate工具就能实现:

library(dplyr)
library(lubridate)
library(tidyr)

# 拆分test_date非空的行
split_rows <- data %>%
  filter(!is.na(test_date)) %>%
  rowwise() %>%
  summarise(
    ID = ID,
    start_date = c(start_date, test_date),
    end_date = c(test_date - days(1), end_date),
    test_date = rep(test_date, 2),
    exposure = c(0, 1),
    .groups = "drop"
  )

# 处理test_date为空的行
na_rows <- data %>%
  filter(is.na(test_date)) %>%
  mutate(exposure = 0)

# 合并所有行并按ID排序
result <- bind_rows(split_rows, na_rows) %>% arrange(ID)

# 查看结果示例
head(result)

代码逻辑说明

  • 非空test_date行处理:
    先筛出有测试日期的行,逐行生成两行数据:

    • 第一行沿用原始起始日期,结束日期设为测试日期的前一天,exposure标记为0
    • 第二行起始日期改为测试日期,结束日期保留原始值,exposure标记为1
  • 空test_date行处理:
    直接给这类行新增exposure列并赋值0,所有原始列保持不变

  • 合并排序:
    把两类结果合并后按ID排序,保证和原始数据的ID顺序一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:29