[英]Sequence of last observation of months in a series of dates in R
如果我有一個范圍為2010-01-04
到2014-12-31
工作日日期,如何創建包含數據中每個月的最后日期的日期向量?
我查看了動物園和潤滑包裝,但找不到任何相關的內容。
這是完成工作的兩步過程:
lubridate::ceiling_date
獲取下個月的第一天 # generage some random dates
set.seed(123)
mydates <- sample(seq(from = as.Date("2017-01-01"),
to = as.Date("2018-12-31"), by="day"), 10)
# generate requested sequence
d1 <- lubridate::ceiling_date(min(mydates), "month")
d2 <- lubridate::ceiling_date(max(mydates), "month")
result <- seq(from=d1, to=d2, by="month") - 1
目前尚不清楚您是要兩個日期的所有月末加上它們之間的所有月份,還是只想兩個日期,但是下面我們都顯示了兩者。
1)這是使用yearmon
類的yearmon
並給出了從第一個日期到第二個日期的所有月末。 將每個輸入的字符串轉換為yearmon
類,創建它們的序列,然后使用等於1(表示每月的最后一天)的frac
轉換為Date
類。
library(zoo)
as.Date(seq(as.yearmon("2010-01-04"), as.yearmon("2014-12-31"), 1/12), frac = 1)
贈送:
[1] "2010-01-31" "2010-02-28" "2010-03-31" "2010-04-30" "2010-05-31"
[6] "2010-06-30" "2010-07-31" "2010-08-31" "2010-09-30" "2010-10-31"
[11] "2010-11-30" "2010-12-31" "2011-01-31" "2011-02-28" "2011-03-31"
[16] "2011-04-30" "2011-05-31" "2011-06-30" "2011-07-31" "2011-08-31"
[21] "2011-09-30" "2011-10-31" "2011-11-30" "2011-12-31" "2012-01-31"
[26] "2012-02-29" "2012-03-31" "2012-04-30" "2012-05-31" "2012-06-30"
[31] "2012-07-31" "2012-08-31" "2012-09-30" "2012-10-31" "2012-11-30"
[36] "2012-12-31" "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30"
[41] "2013-05-31" "2013-06-30" "2013-07-31" "2013-08-31" "2013-09-30"
[46] "2013-10-31" "2013-11-30" "2013-12-31" "2014-01-31" "2014-02-28"
[51] "2014-03-31" "2014-04-30" "2014-05-31" "2014-06-30" "2014-07-31"
[56] "2014-08-31" "2014-09-30" "2014-10-31" "2014-11-30" "2014-12-31"
2)或如果您只是想為每個輸入日期指定對應的月末,則這里是一線的:
library(zoo)
x <- c("2010-01-04", "2014-12-31") # input data
as.Date(as.yearmon(x), frac = 1)
贈送:
[1] "2010-01-31" "2014-12-31"
2a)要在沒有任何軟件包的情況下執行此操作,請首先定義“月初”功能,然后如圖所示應用兩次。
fom <- function(x) as.Date(cut(as.Date(x), "month"))
fom(fom(x) + 31) - 1
贈送:
[1] "2010-01-31" "2014-12-31"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.