Создание нового столбца, который дает разницу во времени между двумя другими столбцами в состоянии другого столбца в R

Мои данные такие. df - это имя фрейма данных

Status          ArrivalDate                   ClosedDate       
Closed          2015-12-01 04:40:24         2015-12-08  10:12:08
In Progress     2015-12-03 06:40:00
Pending         2015-12-12 08:40:54
Cancelled       2015-12-06 04:40:24         2015-12-18  11:33:50

Статус имеет 4 фактора: Закрыто, Отменено, В процессе, В ожидании В процессе и Ожидание не имеет закрытых дат.

Я хочу создать еще один столбец, в котором будет указана разница во времени между датой прибытия и датой закрытия, только если статус закрыт или отменен.

Это код, который я использую сейчас:

df$Life[df$Status=="Closed"|df$Status=="Cancelled"]<-difftime(df$Arrival.Date,df$Closed.Date)

И это сообщение об ошибке, которое я получаю

Ошибка в as.POSIXlt.character(x, tz, ...) : строка символов не имеет стандартного однозначного формата

PS: difftime() работает правильно, когда я пробовал только с двумя датами. При расширении на весь столбец показывает ошибку.


person pramod kumar    schedule 20.05.2016    source источник
comment
Добро пожаловать в Stack Overflow. Пожалуйста, предоставьте воспроизводимый пример и ожидаемый результат. Посмотрите на эту ссылку для получения дополнительной информации.   -  person Sotos    schedule 20.05.2016


Ответы (1)


df$Life[df$Status=="Closed"|df$Status=="Cancelled"]<-difftime(as.POSIXct(df$Arrival.Date, format='%d-%m-%Y %H:%M:%S'),as.POSIXct(df$Closed.Date, format='%d-%m-%Y %H:%M:%S'))

Предполагая, что ваши даты имеют европейский (DMY) формат, если они американские (MYD), просто поменяйте местами %m и %d.

person hd1    schedule 20.05.2016
comment
Даты указаны в формате даты и времени: %y-%m-%d %h:%m:%s. Попытка вашего кода с форматом=%y-%m-%d %h:%m:%s дает следующее предупреждение и помещает NA во все строки столбца «Жизнь»: In df$Life[df$Status == Closed | df$Status == Cancelled] ‹- difftime(as.Date(df$Arrival.Date, : количество элементов для замены не кратно длине замены. - person pramod kumar; 20.05.2016
comment
Судя по вашим данным, `01-12-2015 04:40:24` не похоже, что это будет 2015-й день декабря в 1 году нашей эры (например) - я бы посоветовал вам переосмыслить ваши данные. - person hd1; 20.05.2016
comment
Спасибо за помощь до сих пор, мне жаль, что я сделал ошибку при вводе вопроса. Мое время даты имеет формат, который я упомянул в комментарии, но в любом случае я не думаю, что это проблема формата, потому что это работает, когда я устанавливаю дату и время для двух переменных и использую difftime(). использование as.POSIXct() по-прежнему выдает то же предупреждающее сообщение и NA. Когда я даю значения ClosedDate для всего, независимо от состояния, мой исходный код работает (после использования format() для изменения типа). Это заставляет меня думать, что это фильтрация, которая не работает. Я знаю, что это не имеет смысла, но это то, что происходит. - person pramod kumar; 20.05.2016
comment
Не могли бы вы добавить к своему вопросу dput ваших данных? - person hd1; 21.05.2016
comment
Спасибо за помощь, когда я использовал формат POSIXct вместо даты, он начал работать. - person pramod kumar; 24.05.2016