我想按月汇总我的日期。我想将某个月的最后一个星期六用作该月的日期。通过执行以下操作,我可以获得一周中的星期六日期:
as.Date(paste(6, week(mdy(mydate)), year(mdy(mydate)), sep="-"), "%u-%W-%Y")
但是几个月的天数不同,所以我不能这样做:
as.Date(paste(6, month(mdy(mydate)), year(mdy(mydate)), sep="-"), "%U-%m-%Y")
即使我只是想获取每月第6天的日期,这甚至都行不通。
如何获得一个月的最后一个星期六的日期?所以给09-15-2014
我一个约会09-27-2014
。
1)zoo / cut在zoo快速参考插图中,此函数出现,该函数给定一个"Date"
类变量,x
如果星期五,则返回相同的日期,否则返回下一个星期五:
library(zoo)
nextfri <- function(x) 7 * ceiling(as.numeric(x-5+4) / 7) + as.Date(5-4)
将5替换为6将在下周六提供
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4) / 7) + as.Date(6-4)
现在,如果x
输入的是Date类,则使用cut
,获取月份的第一个月,然后cut
再次使用,获取下个月的第一个月,使用查找下一个星期六nextsat
,然后减去7,以获取输入日期所在月份的最后一个星期六。
the.first <- as.Date(cut(x, "month"))
next.month <- as.Date(cut(the.first + 32, "month")
nextsat(next.month) - 7
测试出来了:
library(zoo)
x <- as.Date("2014-09-15")
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4) / 7) + as.Date(6-4)
the.first <- as.Date(cut(x, "month"))
next.month <- as.Date(cut(the.first + 32, "month"))
nextsat(next.month) - 7
## [1] "2014-09-27"
这仅使用矢量化函数,因此,如果x
是日期矢量,它将仍然有效。
1A)动物园/ as.yearmon.Date / as.Date.yearmon我们可以用一个事实,即缩短这as.Date(as.yearmon(x), frac = 1)
是本月在那里的最后一天的日期as.yearmon.Date
和as.Date.yearmon
是动物园方法:
library(zoo)
x <- as.Date("2014-09-15")
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4) / 7) + as.Date(6-4)
nextsat(as.Date(as.yearmon(x), frac = 1) + 1) - 7
## [1] "2014-09-27"
这也是矢量化的。
2)zoo / lubridate上面没有使用lubridate,但是我们可以像这样重做(1)来使用lubridate:
library(zoo)
library(lubridate)
nextsat <- function(x) 7 * ceiling(as.numeric(x-6+4) / 7) + as.Date(6-4)
x <- as.Date("2014-09-15")
xx <- x
day(xx) <- 1
month(xx) <- month(xx) + 1
nextsat(xx) - 7
## [1] "2014-09-27"
这也是矢量化的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句