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

如何将含起止日期的R DataFrame转换为长格式?

解决方法

方法1:dplyr + tidyr 组合实现

先将字符型日期转换为Date类型,为每一行生成onset到end的日期序列,再展开为多行,代码如下:

library(dplyr)
library(tidyr)
library(purrr)

df_long <- df %>%
  mutate(
    onset = as.Date(onset),
    end = as.Date(end),
    # 为每个id生成对应的日期序列
    date = map2(onset, end, seq, by = "day")
  ) %>%
  # 展开日期序列列
  unnest(date) %>%
  # 保留需要的字段
  select(id, date)

df_long

方法2:data.table(高效处理大数据集)

如果数据集规模较大,data.table的实现方式效率更高:

library(data.table)

setDT(df)[, .(date = seq(as.Date(onset), as.Date(end), by = "day")), by = id]

原尝试失败的原因

你之前用rowwise() + unnest()没效果,大概率是未将字符型日期转换为Date类型,或是没有正确生成列表格式的日期序列。修正后的rowwise()写法如下:

df_long <- df %>%
  rowwise() %>%
  mutate(
    onset = as.Date(onset),
    end = as.Date(end),
    date = list(seq(onset, end, by = "day"))
  ) %>%
  unnest(date) %>%
  select(id, date)

内容的提问来源于stack exchange,提问作者Simón Cárdenas Robledo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:44:56