[R] Convert number to Date
Marc Schwartz
marc_schwartz at me.com
Fri Mar 26 00:09:24 CET 2010
On Mar 25, 2010, at 5:41 PM, Joshua Wiley wrote:
>> Kind of off the thread a bit, but when I do:
>>
>>> as.Date(40182)
>>
>> I ***do not*** get "2080-01-06". Instead I get an error:
>>
>> Error in as.Date.numeric(40182) : 'origin' must be supplied
>>
>> Am I the only user who gets picked on in this way, or does it
>> happen to others as well? The help on as.Date() clearly specifies
>> that "origin" must be supplied. So how come Anna got the result that
>> she did?
>
> I also get that error. I believe there was a thread a few years back
> discussing the merits of including a default origin, but to my
> knowledge, it was never implemented, and there is no way to set a
> default (e.g., through options()).
That was actually just recently discussed again, although I think part of it occurred offlist.
The reason is that the use of as.Date() in this context is intended to be used, as is the case here, with dates coming from other applications that have been converted back to a numeric offset from some origin, where it is likely, as is the case here, that the origin will not be the same as R's.
Thus, there is a reasonable argument to be made to compel the user to know the origin in use by the application from which the data was obtained. Otherwise, if the user does not check their data, they will be in trouble.
If one has dates that have come from R and that have been coerced to numeric, for example via data manipulation (eg. using aggregate(), etc.), one only need to re-set the class back to "Date":
# from ?as.Date
x <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
z <- as.Date(x, "%d%b%Y")
> z
[1] "1960-01-01" "1960-01-02" "1960-03-31" "1960-07-30"
# same as unclass(z)
y <- as.numeric(z)
> y
[1] -3653 -3652 -3563 -3442
#Note that R's origin is 1970-01-01
> as.Date(y, origin = "1970-01-01")
[1] "1960-01-01" "1960-01-02" "1960-03-31" "1960-07-30"
However, all you really need is:
class(y) <- "Date"
> y
[1] "1960-01-01" "1960-01-02" "1960-03-31" "1960-07-30"
HTH,
Marc Schwartz
More information about the R-help
mailing list