В R есть ли способ получить разницу во времени между двумя временами в двух разных столбцах, используя лаг, но игнорируя все нулевые значения? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть датафрейм, который выглядит так:

a<-data.frame(Time = c("Time1",
                   "Time2",
                   "Time3",
                   "Time4",
                   "Time5",
                   "Time6"),
          Start = c("2018-03-17 08:38:00",
                    NA,
                    NA,
                    NA,
                    NA,
                    NA),
          End = c(NA,
                  NA,
                  NA,
                  NA,
                  NA,
                  "2018-03-17 14:31:00"))

Я пытаюсь добавить еще один столбец с разницей во времени между временем «Конец» и временем «Старт».

Я пытался использовать difftime (End, lag (Start), unit = "mins"). Но я не могу понять, как игнорировать нулевые значения, чтобы использовать последнее ненулевое значение в «Пуск».

Я ожидаю, что результат будет выглядеть так:

b<-data.frame(Time = c("Time1",
                   "Time2",
                   "Time3",
                   "Time4",
                   "Time5",
                   "Time6"),
          Start = c("2018-03-17 08:38:00",
                    NA,
                    NA,
                    NA,
                    NA,
                    NA),
          End = c(NA,
                  NA,
                  NA,
                  NA,
                  NA,
                  "2018-03-17 14:31:00"),
          Time_Diff_min = c(rep(353, times = 6)))

Спасибо!

1 Ответ

2 голосов
/ 11 июля 2019

Применить na.locf0 к обоим столбцам и вычесть.

library(zoo)
transform(a, diff = as.numeric(difftime(na.locf0(as.POSIXct(End), fromLast = TRUE), 
                                        na.locf0(as.POSIXct(Start)),
                                        unit = "min")))

, что дает:

   Time               Start                 End diff
1 Time1 2018-03-17 08:38:00                <NA>  353
2 Time2                <NA>                <NA>  353
3 Time3                <NA>                <NA>  353
4 Time4                <NA>                <NA>  353
5 Time5                <NA>                <NA>  353
6 Time6                <NA> 2018-03-17 14:31:00  353
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...