Страница 1 из 1

Исправить некорректный интервал времени

Добавлено: 13 июн 2020, 19:45
VistaSV30
Добрый день!

Подскажите как исправить ошибку при расчете интервала времени:

Код: Выделить всё

library(lubridate)

t1 <- dmy_hm(c("12.10.2019 16:12", "12.10.2019 23:50"))
t2 <- dmy_hm(c("12.10.2019 16:13", "12.10.2019 0:20"))

dt <- difftime(t2, t1, units = "mins")
Получается:
Time differences in mins
[1] 1 -1410

Нужно прописать условие, чтоб при возникновении отрицательного результата к нему прибавлялось 1440. По условию интервал не может быть дольше 1440 минут.

Сделал следующее:

Код: Выделить всё

fdt <- function(x) {
  if(x<0) {x <- x+1440}
    return(x)
  }

apply(dt, FUN = fdt)
Получается ошибка:
Ошибка в apply(dt, FUN = fdt) :dim(X) должен иметь положительную длину

Подскажите, что не так?
Спасибо!

Re: Исправить некорректный интервал времени

Добавлено: 13 июн 2020, 20:39
nickleb
м.б.:

Код: Выделить всё

dt <- difftime(t2, t1, units = "mins")
dt <- ifelse(dt < 0, dt + 24 * 60, dt)
str(dt)
?

..хотя, если:

Код: Выделить всё

t2[2] = dmy_hm("13.10.2019 0:20")
то и ifelse не надо...

Re: Исправить некорректный интервал времени

Добавлено: 13 июн 2020, 20:54
VistaSV30
Спасибо nickleb!
Вы меня уже в который раз выручаете.

Описанная ситуация возникает из-за того, что в базе данных время так записано. Сначала дата события, а потом для всех последующих событий записываются только часы и минуты.

Подскажите, еще, а что с apply не так?

Re: Исправить некорректный интервал времени

Добавлено: 13 июн 2020, 20:58
nickleb
VistaSV30 писал(а): 13 июн 2020, 19:45apply(dt, FUN = fdt)
- если через Вашу функцию и apply-семейство, то:

Код: Выделить всё

sapply(dt, FUN = fdt)

Re: Исправить некорректный интервал времени

Добавлено: 13 июн 2020, 21:00
VistaSV30
Спасибо!
Работает! :D