簡體   English   中英

在R中生成每月最后一天的日期序列

[英]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.yearmonzoo ,之后再通過相同的轉換轉換為一個月的最后一天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)

在上述sten可以是任何可轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM