Вычисление разницы во времени между двумя столбцами
Вопрос
После преобразования коэффициентов в формат POSIXCT и последующего применения формата datetime я хочу взять разницу в datetime между 2 pos1 и pos2.
Однако, когда я делаю это для определенного элемента, я получаю правильный ответ в консоли, но когда я выполняю операцию со всем набором, консоль выводит только число, а также фрейм даты отражает это число, как вы можете видеть.
Как я могу получить часы во фрейме данных, когда я пытаюсь определить разницу?Я использую пакет lubridate, есть ли какая-нибудь функция для этого?
Вот несколько примеров кода/ изображения данных в RStudio, описывающих это
CR_Date <- data.frame(
pos1="2014-07-01 00:00:00",
pos2=c("2014-07-01 00:00:00","2014-07-01 10:15:00")
)
CR_Date[] <- lapply(CR_Date,as.POSIXct)
CR_Date
# pos1 pos2
#1 2014-07-01 2014-07-01 00:00:00
#2 2014-07-01 2014-07-01 10:15:00
CR_Date$pos2[2] - CR_Date$pos1[2]
#Time difference of 10.25 hours
CR_Date$hours <- CR_Date$pos2 - CR_Date$pos1
Решение
Во-первых, это не имеет никакого отношения к лубридату.
Во-вторых, RStudio подвела вас, напортачив с печатью переменной в окне отображения.Если вы войдете CR_Date$hours
в окне командной строки вы увидите, что он печатает
#Time differences in secs
#[1] 0 36900
и head(CR_Date)
дает:
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0 secs
#2 2014-07-01 2014-07-01 10:15:00 36900 secs
Любой из них подсказал бы вам, что именно он отображает.
Как предполагает @Victorp, difftime
есть ли способ решить эту проблему:
CR_Date$hours <- with(CR_Date, difftime(pos2,pos1,units="hours") )
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00 hours
#2 2014-07-01 2014-07-01 10:15:00 10.25 hours
Другие советы
Вы также можете использовать "as.double
метод" и его units
аргумент (см. ?diffime
):
as.double
способ [as.double(x, units = "auto", ...)
] возвращает числовое значение, выраженное в указанных единицах измерения
...где x
является
объект, наследуемый от класса
"difftime"
Применительно к вашему примеру, где pos2 - pos1
приведет к difftime
объект:
CR_Date$hours <- as.double(CR_Date$pos2 - CR_Date$pos1, units = "hours")
CR_Date
# pos1 pos2 hours
#1 2014-07-01 2014-07-01 00:00:00 0.00
#2 2014-07-01 2014-07-01 10:15:00 10.25
Или другой units
:
as.double(CR_Date$pos2 - CR_Date$pos1, units = "mins")
#[1] 0 615
as.double(CR_Date$pos2 - CR_Date$pos1, units = "days")
#[1] 0.0000000 0.4270833