Рассчитать и добавить столбец length_of_time из столбца даты в R

Я пытаюсь создать новое вычисляемое поле length_of_time. У меня есть столбец final_date с датами:

2/10/2016  
4/4/2016  
5/8/2016  
10/1/2016

и я пытаюсь рассчитать новое поле, показывающее продолжительность времени между 23.10.2016 и final_date.

Я попытался использовать dplyr:

mutate(df, length_of_time = 10/23/2016 - final_date) 

и получил ошибку:

"Ошибка в eval(substitute(expr), envir, enclos): можно вычесть только из объектов "POSIXt""

поэтому я попытался использовать:

df <- as.POSIXlt(df$final_date)

и снова запустил мой исходный код, только чтобы получить следующую ошибку:

Error in UseMethod("mutate_") : 
  no applicable method for 'mutate_' applied to an object of class "c('POSIXlt', 'POSIXt')"

person James Steele    schedule 24.10.2016    source источник


Ответы (1)


Вы немного перепутали форматы даты. (см. комментарии к коду для объяснения)

library(dplyr)

df <- data.frame(final_date = c("2/10/2016","4/4/2016"))

## you need to specify the format of your date columns as it is ambiguous
## I've guessed you're using day/month/year
df$final_date <- as.POSIXct(df$final_date, format = "%d/%m/%Y")

## and you need to subtract the `final_date` (which is POSIXct) 
## from another POSIXct object
mutate(df, length_of_time = as.POSIXct("2016-10-23") - final_date)

final_date length_of_time
1 2016-10-02  20.95833 days
2 2016-04-04 201.95833 days

Дальнейшее чтение

Чтобы помочь понять разницу между POSIXct и POSIXlt, форматами даты, вычислением даты и т. д.

person SymbolixAU    schedule 24.10.2016