[英]generate a date sequence of last day of month in R
如果我提供開始日期和結束日期以及頻率,則我應該能夠生成從開始到結束的一系列日期,以便
1) 日期是該月的最后一天 。 2)我可以將序列的頻率設置為12的任意因子(12個月)。 假設頻率為3,則表示間隔為4個月。
對於(1),以下函數為我提供了間隔為3個月(即每季度)的輸出,但沒有給出日期與該月的最后一天的輸出。
DateSeq<-function(st,en, freq){
seq(st, en, by = paste(as.character(12/freq), "months"))
}
DateSeq(as.Date("2015-01-01"),as.Date("2018-03-03"),4)
如何將其轉換為給我最后一天的序列? 給我一個簡單的代碼。
我們可以改變的起始日期和結束日期月份開始做之前seq
使用as.yearmon
從zoo
,之后再通過相同的轉換轉換為一個月的最后一天as.yearmon
library(zoo)
DateSeq <- function(st, en, freq) {
st <- as.Date(as.yearmon(st))
en <- as.Date(as.yearmon(en))
as.Date(as.yearmon(seq(st, en, by = paste(as.character(12/freq), "months"))), frac = 1)
}
DateSeq(as.Date("2015-01-31"),as.Date("2018-03-03"),4)
#[1] "2015-01-31" "2015-04-30" "2015-07-31" "2015-10-31" "2016-01-31" "2016-04-30" "2016-07-31" "2016-10-31" "2017-01-31"
#[10] "2017-04-30" "2017-07-31" "2017-10-31" "2018-01-31"
這給出了從st
的年/月到en
的年/月的月末日期的序列。
library(zoo)
as.Date(seq(as.yearmon(st), as.yearmon(en), by = 1 / freq), frac = 1)
在上述st
和en
可以是任何可轉換為yearmon
類,包括yearmon
本身, Date
,字符串或數字。 例如, "2000-02-01"
, "2000-02"
, as.Date("2000-02-01")
, 2000+1/12
as.Date("2000-02-01")
。
如果en
是日期,並且序列的結束日期應不晚於en
則將as.yearmon(en)
替換為以下內容:如果en
不在月底,則將其減去1/12。
as.yearmon(en) - (as.Date(en) < as.Date(as.yearmon(en), frac = 1)) / 12
類似地,如果st
是日期,並且序列的開始日期應不晚於st
使用相同的想法,如果st
不是在月底時減去1/12,則用as.yearmon(st)
替換為
as.yearmon(st) - (as.Date(st) < as.Date(as.yearmon(st), frac = 1)) / 12
關於我們是否真的需要日期有一個問題,因為它們總是在月底。 似乎關鍵是要創建一個年/月序列,而月末日期只是表示該序列的一種方式。 一種更簡單的方法是直接yearmon
序列。
seq(as.yearmon(st), as.yearmon(en), by = 1 / freq)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.