r - 如何循环日期?
问题描述
假设我有以下日期:
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"))
}
不幸的是,日期不会以日期格式存储。我怎样才能改变这个?
解决方案
我们可以使用Map
循环 'Start', 'End' 向量中的相应日期并获取seq
, 指定by
in MoreArgs
。这将创建一个slist
序列,可以使用usingDate
将其转换为单个序列vector
c
do.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
每个元素,因为它们是矢量化的并且可以应用一次
推荐阅读
- css - 我无法通过 Extend 和 Media 克服 SCSS 限制
- python - 石墨烯继电器中基于光标的分页
- python - 将包含多个嵌套字典的字典转换为 .csv
- java - 更漂亮的Multiple DateTimeFormatter?
- angular - Ionic 4 将 Node 从 v12 升级到 Node v14
- c++ - 如何使用 boost::bind 和类成员编写 boost qi 解析器语义操作
- reactjs - React - 状态对象中的意外标记
- python - 有没有办法在函数中使用“from math import *”?
- php - Laravel 路线不会移动到下一条路线
- typescript - 将 Object 转换为 Typescript 的 TypedObject