Преобразование числового столбца (разница между временем прибытия и отправления) кадра данных в минуты

Уважаемые члены сообщества R, я хотел бы создать новую переменную (время в пути), основанную на разнице между временем отправления и временем прибытия пассажиров (время прибытия - время отправления) из пункта отправления в пункт назначения (24-часовой формат).

Однако проблема в том, что столбец является числовым, и значения более 30 минут не регистрируются как минуты. Я хочу, чтобы время в пути было минутами, а не часами. Ниже представлен формат моего набора данных.

Departuretime  Arrivaltime commutetime 
950            1000        50
1030           1035        5
1750           1800        50
1520           1530        10

Когда я беру разницу между временем отправления и прибытия, после 30 минут все становится странно, чего вы, конечно же, ожидаете. В моем фрейме данных 6 670 записей, и эти столбцы - единственная проблема. Разница между 950 и 1000 должна переводиться в разницу для 9:50 и 10:00, поэтому разница не может быть 50. Как показано во второй последней строке, разница между 1750 и 1800 не должна давать 50.

Буду безмерно признателен за вашу своевременную помощь.

Спасибо!!!


person Abdirashid M. Dahir    schedule 16.04.2020    source источник
comment
Отвечает ли это на ваш вопрос? R конвертирует число во время   -  person Björn    schedule 16.04.2020
comment
См. Также convert-numbers-to-time-in-r.   -  person Björn    schedule 16.04.2020


Ответы (1)


Преобразуйте Arrivaltime и Departuretime в формат POSIXct и используйте difftime для вычисления разницы в минутах.

df$commutetime <- difftime(
               as.POSIXct(sprintf("%04d", df$Arrivaltime), format = "%H%M"), 
               as.POSIXct(sprintf("%04d", df$Departuretime), format = "%H%M"), 
               units = "mins")

df
#  Departuretime Arrivaltime commutetime
#1           950        1000     10 mins
#2          1030        1035      5 mins
#3          1750        1800     10 mins
#4          1520        1530     10 mins

данные

df <- structure(list(Departuretime = c(950L, 1030L, 1750L, 1520L), 
Arrivaltime = c(1000L, 1035L, 1800L, 1530L)), row.names = c(NA, 
-4L), class = "data.frame")
person Ronak Shah    schedule 16.04.2020
comment
Дорогой Ронак, отлично сработало. Нужно ли мне также учитывать субтитры данных? Кажется, первый код решил мою проблему. Я очень ценю вашу своевременную помощь. - person Abdirashid M. Dahir; 16.04.2020
comment
@ AbdirashidM.Dahir Нет, вы можете игнорировать эту часть, это способ поделиться воспроизводимыми данными. Первая часть - это ответ. - person Ronak Shah; 16.04.2020
comment
Я отметил его полезным. Большое спасибо, Ронак. Но когда я попытался использовать ggplot для режима движения (автомобиль, автобус, велосипед) - который является символом (фактором) по оси x - против времени в пути по оси y с помощью следующего кода, я получаю странное предупреждение и график с отрицательными значениями (невозможно). Не знаю, как автоматически выбрать масштаб для объекта типа difftime. По умолчанию - непрерывный. Ниже мой код. ggplot (jongnocommutetime, aes (x = режим, y = время в пути)) + + theme_bw () + + geom_col () + + labs (y = режим путешествия, + title = доля режима по цели поездки) - person Abdirashid M. Dahir; 16.04.2020
comment
Я пытаюсь, но получаю этот ответ Спасибо за отзыв! Голоса, отданные теми, у кого репутация менее 15, записываются, но не изменяют общедоступный рейтинг публикации. - person Abdirashid M. Dahir; 16.04.2020
comment
Принято, и у меня возникла еще одна проблема. Ознакомьтесь с моим вопросом в ближайшие 10 минут. Буду очень признателен за вашу помощь !!! - person Abdirashid M. Dahir; 16.04.2020
comment
Спасибо за вашу ggplot попытку, вам, вероятно, следует задать новый вопрос, но вам может потребоваться преобразовать commutetime столбец в числовой. df$commutetime <- as.numeric(df$commutetime). - person Ronak Shah; 16.04.2020
comment
Большое тебе спасибо!!! я уже разместил этот вопрос в моем мире. Ваша помощь незаменима! - person Abdirashid M. Dahir; 16.04.2020