在R中获得前一年的最后一天?

Nea*_*alC 3 r

所以问题是如何选择上一年的最后一天.我想把它设置为自动,因为我们可能会这样做几年.

我已经建立的是这样的:

lastyear <- as.numeric(format(today, "%Y")) - 1
Run Code Online (Sandbox Code Playgroud)

今天只是一个带有Sys.Date()的对象,所以我不相信我需要为此提供代码?(如果有人真的想知道,那就是日期的格式.)

我上面的代码得到了前一年的罚款,但我希望能为我挑选出"2014-12-31".

那么,重复的问题是如何自动挑选上一年的最后一天?

另外,我在这个脚本中使用了lubridate.

hrb*_*str 9

这是一个Hadleyverse版本:

library(lubridate)

last_day_prev_year <- function(x) floor_date(x, "year") - days(1)

last_day_prev_year(Sys.Date())
## [1] "2014-12-31 UTC"
Run Code Online (Sandbox Code Playgroud)

我实际上已经投了"基础"答案,因为它是基础,而且 - 正如GSee所指出的那样 - 不太可能有问题.lubridate回答最重要的是可读性.它也会失去速度:

library(microbenchmark)
library(lubridate)

ldpy_base <- function(x) {
  lastyear <- as.numeric(format(x, "%Y")) - 1
  last_date <- as.Date(sprintf('%s-12-31',lastyear))
}

ldpy_lubridate <- function(x) floor_date(x, "year") - days(1)


mb <- microbenchmark(ldpy_base(Sys.Date()),
                     ldpy_lubridate(Sys.Date()),
                     times=5000)

autoplot(mb) + labs(title="5,000 runs, base vs lubridate")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Lyz*_*deR 7

这样的事情可能是:

last_day <- function(x) {
  lastyear <- as.numeric(format(x, "%Y")) - 1
  last_date <- as.Date(sprintf('%s-12-31',lastyear))
}

> a<-last_day(Sys.Date())

> a
[1] "2014-12-31"

> class(a)
[1] "Date"
Run Code Online (Sandbox Code Playgroud)