【问题标题】:Calculate date intervals and count of days in a loop计算循环中的日期间隔和天数
【发布时间】:2017-05-30 14:43:02
【问题描述】:

我尝试确定开始日期和结束日期 2 个不同的时间间隔。

每个区间定义为:

  • 最小值:我的 df 的最小日期。
  • max:最大日期减去一些固定延迟(1、2、3 周)

对于我写的简单的两个滞后:

df <- sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 150)
dates <- as.data.frame(df)


end_1week <- max(df) - weeks(1)
min <- min(df)


end_2week <- max(df) - weeks(2)
min <- min(df)

print(paste('Sample 1 starts from',min,'to', end_1week))
print(paste('Sample 2 starts from',min,'to', end_2week))

如何针对任意数量的滞后将此过程矢量化? 假设定义一个:

lags <- (1,2,4,8,12)

并打印每个样本的开始日期和结束日期,加上每个样本的天数?

【问题讨论】:

  • 您能提供一个可重现的示例数据吗?
  • 我用一些随机数据编辑@ycw
  • 周数未定义

标签: r for-loop dplyr vectorization


【解决方案1】:

这可能会为您提供您正在寻找的输出

library(lubridate)

df <- sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 150)
dates <- as.data.frame(df)

lags <- c(1,2,4,8,12)
min <- min(df)
end_weeks <- max(df) - weeks(lags)

print(paste('Sample',lags,'starts from',min,'to',end_weeks))

【讨论】:

  • weeks 是一个lubridate 函数,它允许您按周间隔操作日期。 lubridate 还包括与此类似的函数,用于秒、分钟、小时、天...等
  • 好点@ycw 我已将答案更新为矢量化版本,而不是通过 for 循环处理。
猜你喜欢
  • 1970-01-01
  • 2017-06-20
  • 2012-03-26
  • 1970-01-01
  • 2020-07-01
  • 2012-10-28
  • 1970-01-01
  • 2019-03-02
  • 2016-09-08
相关资源
最近更新 更多