r - 对于数据框中的每一行,根据日期范围创建多行

标签 r dataframe

我有一个如下所示的数据框:

Name    StartDate   EndDate
A   12/12/2012  12/15/2012
B   11/11/2012  11/14/2012

对于上面的每一行,我想生成带有名为“日期”的附加列的行,该列的范围在上面的开始日期和结束日期之间。因此,上面的数据框将产生另一个数据框:

Name    StartDate   EndDate Date
A   12/12/2012  12/15/2012  12/12/2012
A   12/12/2012  12/15/2012  12/13/2012
A   12/12/2012  12/15/2012  12/14/2012
A   12/12/2012  12/15/2012  12/15/2012
B   11/11/2012  11/14/2012  11/11/2012
B   11/11/2012  11/14/2012  11/12/2012
B   11/11/2012  11/14/2012  11/13/2012
B   11/11/2012  11/14/2012  11/14/2012

我找到了seq.Date()函数可以创建所需的日期列表,但我不确定如何在不使用 for 循环的情况下将其应用于每一行。

最佳答案

使用data.table你可以做的包:

library(data.table)
setDT(df)[, c('StartDate', 'EndDate') := lapply(.SD, as.Date, format = '%m/%d/%Y'), .SDcols = 2:3
          ][, .(date = seq(StartDate, EndDate, 'day')), by = .(Name, StartDate, EndDate)]

给出:

   Name  StartDate    EndDate       date
1:    A 2012-12-12 2012-12-15 2012-12-12
2:    A 2012-12-12 2012-12-15 2012-12-13
3:    A 2012-12-12 2012-12-15 2012-12-14
4:    A 2012-12-12 2012-12-15 2012-12-15
5:    B 2012-11-11 2012-11-14 2012-11-11
6:    B 2012-11-11 2012-11-14 2012-11-12
7:    B 2012-11-11 2012-11-14 2012-11-13
8:    B 2012-11-11 2012-11-14 2012-11-14

说明:

  • 第一行代码将日期列转换为日期格式。
  • 按所有列 ( by = .(Name,StartDate,EndDate) ) 进行分组并使用 seq(StartDate,EndDate,'day') 创建序列.

关于r - 对于数据框中的每一行,根据日期范围创建多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006727/

相关文章:

list - rbind 列表列表中的数据帧

python - 无法根据python中的用户输入过滤csv表中的数据

python - 如何计算长格式数据帧与 Pandas 的相关性?

r - 在 R 中查找给定数据的 "row wise" "Mode"

r - 在旁边总结变量

r - ggplot2 在使用自定义 x 轴限制绘制直方图时丢失数据

python - 如何使用 Pandas 子选择与 float dtype 相等的行

r - 在 R 上按列值聚合行(总和)的最简单方法是以下类型的数据框?

python - 我应该如何在不删除行的情况下将值更改为 0

r - Rmd 笔记本中节号后的尾随句点