首页 > 解决方案 > 如何循环日期?

问题描述

假设我有以下日期:

Start <- c(as.Date("2020-01-01"),as.Date("2020-02-02"),as.Date("2020-06-06"))
End <- c(as.Date("2028-01-01", as.Date("2026-02-02"), as.Date("2025-06-06")) 

我想有一个所有日期都采用日期格式(%Y-%m-%d)的向量:

Vec <- c()      

for (i in 1:3){
  Vec <- c(Vec, seq.Date(Start[i],End[i], by ="year"))
}

不幸的是,日期不会以日期格式存储。我怎样才能改变这个?

标签: r

解决方案


我们可以使用Map循环 'Start', 'End' 向量中的相应日期并获取seq, 指定byin MoreArgs。这将创建一个slist序列,可以使用usingDate将其转换为单个序列vectorcdo.call

do.call(c, Map(seq, MoreArgs  = list(by = 'year'), Start, End))
#[1] "2020-01-01" "2021-01-01" "2022-01-01" "2023-01-01" "2024-01-01" "2025-01-01" "2026-01-01" "2027-01-01" "2028-01-01" "2020-02-02"
#[11] "2021-02-02" "2022-02-02" "2023-02-02" "2024-02-02" "2025-02-02" "2026-02-02" "2020-06-06" "2021-06-06" "2022-06-06" "2023-06-06"
#[21] "2024-06-06" "2025-06-06"

数据

Start <- as.Date(c("2020-01-01", "2020-02-02", "2020-06-06"))
End <- as.Date(c("2028-01-01", "2026-02-02", "2025-06-06"))

注意:我们不必包装as.Date每个元素,因为它们是矢量化的并且可以应用一次


推荐阅读