Разделите два разных времени
У меня три раза (POSIXct
) объекты t1
, t2
, t3
которые определяют продолжительность времени для выполнения задачи.
я нашел t1
, t2
, t3
сделав следующее:
t1 <- as.POSIXct("2016-10-30 13:53:34") - as.POSIXct("2016-10-30 13:35:34")
t2 <- as.POSIXct("2016-10-30 14:53:34") - as.POSIXct("2016-10-30 14:35:34")
t3 <- as.POSIXct("2016-10-30 15:50:34") - as.POSIXct("2016-10-30 15:40:34")
Я хочу найти отношения t1/t3
а также t2/t3
, Однако я получаю следующую ошибку:
t1/t3
# Error in `/.difftime`(t1, t3) :
# second argument of / cannot be a "difftime" object
Я поняла что два difftime
объекты не могут быть разделены. Есть ли способ, которым я мог бы найти результат деления двух difftime
объекты?
3 ответа
Разделить на difftime
Вы должны преобразовать его в числовой. Если, как вы указали в комментарии, вы хотите, чтобы ответ выражался в секундах, вы можете указать 'secs'
единицы. Например:
t1/as.double(t3, units='secs')
Как отмечает @JonathanLisic, as.double
как правило, не берет units
параметр, и это не будет работать для общих классов времени. Это S3
метод для difftime
который принимает параметр.
На сегодняшний день (9/2018) вы можете использовать as.numeric()
повернуть difftime
значения в числовые значения. то есть, если вы должны были взять
as.numeric(t3)
R вернет 10 по желанию.
Ответ @MatthewLundberg является более правильным, но я предложу альтернативу, чтобы помочь проиллюстрировать основные структуры основанных на времени объектов в R, которые всегда являются числами:
unclass(t1)/unclass(t3)
# [1] 1.8
# attr(,"units")
# [1] "mins"
Обратите внимание, что с точки зрения единиц, подход t1/as.double(t3, units = 'secs')
не имеет особого смысла, так как единицы вывода - мин / с, тогда как этот ответ не содержит единиц измерения.
Обратите внимание, что этот подход немного опасен, так как по умолчанию -.POSIXt
(который в конечном итоге называется, когда вы определяете t1
, t2
, а также t3
) автоматически выбирает единицы вывода (по ядру, -.POSIXt
здесь позвонят difftime
по умолчанию units = "auto"
). В этом случае нам (возможно) повезло, что всем 3 даны единицы, но рассмотрим t4
:
t4 = as.POSIXct('2017-10-21 12:00:35') - as.POSIXct('2017-10-21 12:00:00')
t4
# Time difference of 35 secs
Опять же, если мы используем t4
в соотношении, мы, вероятно, получим неправильные единицы.
Мы можем избежать этого, явно вызвав difftime
и объявив единицы заранее:
t1 = difftime("2016-10-30 13:53:34", "2016-10-30 13:35:34", units = 'mins')
t2 = difftime("2016-10-30 14:53:34", "2016-10-30 14:35:34", units = 'mins')
t3 = difftime("2016-10-30 15:50:34", "2016-10-30 15:40:34", units = 'mins')
t4 = difftime('2017-10-21 12:00:35', '2017-10-21 12:00:00', units = 'mins')
t4
# Time difference of 0.5833333 mins