[R] previous monday date
Marc Schwartz
marc_schwartz at me.com
Fri Sep 2 17:59:37 CEST 2011
On Sep 2, 2011, at 10:35 AM, Ben qant wrote:
> Hello,
>
> I'm attempting to return the date (in form '%Y-%m-%d') of the Monday
> previous to the current date. For example: since it is 2011-09-02 today, I
> would expect 2011-08-29 to be the return value.
>
> I found the following in:
> http://www.mail-archive.com/r-help@r-project.org/msg144184.html
>
> Start quote from link:
> prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4)
>
> For example,
>
>> prevmonday(Sys.Date())
> [1] "2011-08-15"
>> prevmonday(prevmonday(Sys.Date()))
> [1] "2011-08-15"
>
> End quote from link.
>
> But when I do it I get:
>> prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4)
>> prevmonday(Sys.Date())
> Error in as.Date.numeric(1 - 4) : 'origin' must be supplied
>
> I've tried setting the 'origin' argument in as.Date() in different ways, but
> it returns inaccurate results.
>
> Thanks,
>
> Ben
If memory serves, this is because Gabor used the version of as.Date() from his 'zoo' package in that post, which does not require an origin to be specified, whereas the default as.Date() function in R's base package does:
prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4)
> prevmonday(Sys.Date())
Error in as.Date.numeric(1 - 4) : 'origin' must be supplied
> require(zoo)
Loading required package: zoo
Attaching package: 'zoo'
The following object(s) are masked from 'package:base':
as.Date
> prevmonday(Sys.Date())
[1] "2011-08-29"
# Remove 'zoo' to use the base function
detach(package:zoo)
> prevmonday(Sys.Date())
Error in as.Date.numeric(1 - 4) : 'origin' must be supplied
# Fix the function to use base::as.Date()
prevmonday <- function(x) 7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4, origin = "1970-01-01")
> prevmonday(Sys.Date())
[1] "2011-08-29"
See ?as.Date
HTH,
Marc Schwartz
More information about the R-help
mailing list