Создайте числа отставания до уникальных значений - PullRequest
0 голосов
/ 23 января 2020

У меня есть датафрейм df, где мне нужно иметь значения запаздывания, чтобы получить разницу между временами

df
ColA      ColB     Lag(ColB)
1      11:00:12    11:00:13
1      11:00:13    11:00:14
1      11:00:14       NA
2      11:00:15    11:00:16
2      11:00:16    11:00:17
2      11:00:17       NA
3      11:00:18    11:00:19
3      11:00:19    11:00:20
3      11:00:20       NA

Выше только уникальных значений мне нужно создать запаздывание. Если вы видите, в тот момент, когда ColA изменяется с 1 на 2 и с 2 на 3, задержка равна NA. Так можно ли этого добиться?

1 Ответ

0 голосов
/ 23 января 2020

Как уже упоминалось @Sotos, вам нужно сгруппировать по вашему colA, прежде чем выполнять столбец задержки, а затем рассчитать время различий.

Используя пакеты dplyr и lubridate, вы можете рассчитать время различий по группам

library(dplyr)
library(lubridate)
df %>% group_by(ColA) %>% mutate(NewLag = lead(ColB)) %>%
  mutate(diff = hms(NewLag)-hms(ColB))

# A tibble: 9 x 5
# Groups:   ColA [3]
   ColA ColB     `Lag(ColB)` NewLag    diff
  <int> <chr>    <chr>       <chr>    <dbl>
1     1 11:00:12 11:00:13    11:00:13     1
2     1 11:00:13 11:00:14    11:00:14     1
3     1 11:00:14 NA          NA          NA
4     2 11:00:15 11:00:16    11:00:16     1
5     2 11:00:16 11:00:17    11:00:17     1
6     2 11:00:17 NA          NA          NA
7     3 11:00:18 11:00:19    11:00:19     1
8     3 11:00:19 11:00:20    11:00:20     1
9     3 11:00:20 NA          NA          NA

Это то, что вы ищете?

Пример Данные

structure(list(ColA = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), 
    ColB = c("11:00:12", "11:00:13", "11:00:14", "11:00:15", 
    "11:00:16", "11:00:17", "11:00:18", "11:00:19", "11:00:20"
    ), `Lag(ColB)` = c("11:00:13", "11:00:14", NA, "11:00:16", 
    "11:00:17", NA, "11:00:19", "11:00:20", NA)), row.names = c(NA, 
-9L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x5569bf9b0310>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...