2016-03-25 3 views
1

Я пытаюсь вычесть две даты в R. Эти две даты с помощью команды структуры:Как рассчитать количество дней между двумя датами в R

str(standard_data_4testing$start_datetime) 
POSIXct[1:489124], format: "2016-02-01 00:38:49" "2016-02-01 07:48:53" "2016-02-01 08:32:08" "2016-02-01 11:21:13" ... 

str(standard_data_4testing$original_installdate) 
Date[1:489124], format: "2015-10-15" "2015-10-15" "2015-10-15" "2016-01-29" "2016-01-29" "2016-01-29" ... 

Я создал и с as.Date функциями в R но start_datetime имеет дату и время, и original_installdate имеет дату только в исходных данных, как указано выше.

Есть ли способ их вычесть?

Я пытался вычитать, используя эту инструкцию:

standard_data_4testing$start_datetime - standard_data_4testing$original_installdate 

, но я получаю эту ошибку:

Warning message: Incompatible methods ("-.POSIXt", "-.Date") for "-"

после того, как печатает некоторые данные:

[6049] "2016-02-01 09:48:44 UTC" "2016-02-01 07:24:08 UTC" "2016-02-01 09:02:33 UTC" "2016-02-01 09:14:29 UTC" [6053] "2016-02-01 10:49:46 UTC" "2016-02-01 19:07:52 UTC" "2016-02-01 02:39:04 UTC" "2016-02-01 03:59:29 UTC" [6057] "2016-02-01 07:13:05 UTC" "2016-02-01 07:58:50 UTC" NA

Я также попытался использовать POSIXct, но получил аналогичную ошибку.

Есть ли способ вычесть две даты, несмотря на различия в их компонентах?

Спасибо за вашу помощь

+0

Можно ли пренебречь компонентом времени в первом формате? – DatamineR

+0

сообщение говорит, что один из них - «POSIxt», а другой «Date». Если они являются одним и тем же классом, вы можете вычесть. –

+0

DatamineR - это интересная идея. Я попытаюсь удалить его, как я его определяю .asDate и посмотреть, поможет ли это. Я попробовал это и получил ту же ошибку: Предупреждение: Несовместимые методы ("-.POSIXt", "-Date") для "-" – Jazzmine

ответ

2

Преобразовать обе даты к POSIXct класса в первую очередь. Обязательно выполняйте вычисления в том же часовом поясе, классы POSIXt по умолчанию соответствуют вашему часовому поясу локали, as.Date по умолчанию - по UTC.

test1 <- as.Date("2016-01-01", tz="UTC") 
test2 <- strptime("2016-01-02", format="%Y-%m-%d", tz="UTC") 
difftime(as.POSIXct(test2), as.POSIXct(test1, tz="UTC"), units="days") 
# Time difference of 1 days