Вычисление разницы во времени между двумя столбцами

StackOverflow https://stackoverflow.com//questions/25033585

  •  21-12-2019
  •  | 
  •  

Вопрос

После преобразования коэффициентов в формат 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

enter image description here

Это было полезно?

Решение

Во-первых, это не имеет никакого отношения к лубридату.

Во-вторых, 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top