Как уже упоминалось @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>)