I'm trying to add a new column with date calculations. The calculation to be entered in the new column is variable MaturityDate minus today's date. MaturityDate in my dataset is in MM/DD/YYYY format and today's date entered with Sys.Date() is in a different format, which I think is what's giving me trouble when calculating. help please!
Asked
Active
Viewed 1,503 times
2
-
2Make sure both values are proper POSIX date values in R (see `?DateTimeClasses`). Sounds right now like one of them may be a factor or string. But you really need to post a [reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) with sample input data that closely resembles your own so we can see what's going on. – MrFlick May 06 '15 at 21:32
4 Answers
2
Use package lubridate to make date manipulation easy.
library(lubridate)
somedate <- mdy("3/14/2015")
today <- now()
somedate - today

DaveH
- 191
- 5
0
I would convert the dates to a single format to be sure.
date.to.numeric <- function(x) as.numeric(strptime(x,'%m/%d/%Y'))
now <- function() as.numeric(strptime(Sys.Date(),'%Y-%m-%d'))
With this you get time difference in seconds using
date.to.numeric(date) - now()
Also look at as.POSIXct
for more date formatting if you wanted something different (e.g., difference in calendar months).

Max Candocia
- 4,294
- 35
- 58
0
When your dataframe is called YourDataFrame
and your new column with the desired result should be called newCol
:
YourDataFrame$newCol <- as.Date(MaturityDate, "%m/%d/%Y") - Sys.Date()

maRtin
- 6,336
- 11
- 43
- 66
0
Something that works well for me is using a combination of library(dplyr)
and library(lubridate)
like so:
dataset <-dataset %>%
mutate(MaturityDate=mdy(MaturityDate), #make sure to say what the format is first
Sys.Date=mdy(Sys.Date)) %>%
mutate(difference=as.numeric(difftime (Sys.Date, MaturityDate, units = "days")))
This gives something like so:
head(dataset,2)
> MaturityDate Sys.Date difference
> 2018-05-05 2018-05-26 50
> 2018-06-06 2018-06-10 48

Blundering Ecologist
- 1,199
- 2
- 14
- 38