Reputation: 329
I have the following dataframe containing a column of dates and a column of assessments:
dates<-c("2015-01-02","2015-01-10","2016-01-15")
assessments<-c('1','2','3')
dates_dataframe = data.frame(dates, assessments)
dates_dataframe$dates<-as.Date(dates_dataframe$dates)
I want to create another column in this dataframe that contains the number of days between one assessment and the next.
How would I go about doing this?
Upvotes: 1
Views: 121
Reputation: 18691
You can do this with diff
:
dates_dataframe$days = c(0, diff(dates_dataframe$dates))
dates_dataframe$days2 = c(diff(dates_dataframe$dates), 0)
or with NAs:
dates_dataframe$days3 = c(NA, diff(dates_dataframe$dates))
dates_dataframe$days4 = c(diff(dates_dataframe$dates), NA_character_)
Result:
> dates_dataframe
dates assessments days days2 days3 days4
1 2015-01-02 1 0 8 days NA 8 days
2 2015-01-10 2 8 370 days 8 370 days
3 2016-01-15 3 370 0 days 370 NA days
Upvotes: 2
Reputation: 1354
I think you should go with useR's answer but here is another one:
dates<-c("2015-01-02","2015-01-10","2016-01-15")
assessments<-c('1','2','3')
dates_dataframe <- cbind.data.frame(dates, assessments)
dates_dataframe$dates <- as.Date(dates_dataframe$dates)
dates_dataframe$dates_shift = shift(dates_dataframe$dates,1)
dates_dataframe$days <- (dates_dataframe$dates - dates_dataframe$dates_shift)
dates assessments dates_shift days
1 2015-01-02 1 <NA> NA days
2 2015-01-10 2 2015-01-02 8 days
3 2016-01-15 3 2015-01-10 370 days
Upvotes: 1
Reputation: 21749
Another way is using shift
function:
# create data
dates<-c("2015-01-02","2015-01-10","2016-01-15")
assessments<-c('1','2','3')
df <- data.table(dates, assessments)
# convert to date format
df[, dates := as.Date(dates)]
# shift
df[, next_dates := shift(dates, 1)]
# get difference
df[, difference := abs(next_dates - dates)]
dates assessments next_dates difference
1: 2015-01-02 1 <NA> NA days
2: 2015-01-10 2 2015-01-02 8 days
3: 2016-01-15 3 2015-01-10 370 days
Upvotes: 2