Мы можем использовать as.ITime
для преобразования в объект 'Time', а затем взять mean
после группировки по 'DATA1' и hour
из 'DATA2'
library(data.table)
library(dplyr)
df1 %>%
mutate(DATA2 = as.ITime(DATA2)) %>%
group_by(DATA1, hour = hour(DATA2)) %>%
summarise(DATA2 = mean(DATA2)) %>%
select(-hour)
# A tibble: 7 x 2
# Groups: DATA1 [4]
# DATA1 DATA2
# <chr> <ITime>
#1 BALUBABA 03:17:55
#2 PAPERINO 03:27:46
#3 PAPERINO 04:43:47
#4 PAPERINO 05:29:29
#5 PIPPO000 00:26:40
#6 ZORROBIS 07:57:57
#7 ZORROBIS 18:28:54
Или с data.table
setDT(df1)[, .(DATA2 = mean(as.ITime(DATA2))), by = .(DATA1, hour = hour(as.ITime(DATA2)))]
data
df1 <- structure(list(DATA1 = c("PAPERINO", "PAPERINO", "PAPERINO",
"PAPERINO", "PIPPO000", "PIPPO000", "PIPPO000", "PIPPO000", "PIPPO000",
"PIPPO000", "PIPPO000", "BALUBABA", "BALUBABA", "ZORROBIS", "ZORROBIS",
"ZORROBIS", "ZORROBIS", "ZORROBIS", "ZORROBIS"), DATA2 = c("05:29:29",
"04:43:47", "04:43:47", "03:27:46", "00:27:07", "00:27:07", "00:27:07",
"00:27:07", "00:26:04", "00:26:04", "00:26:04", "03:02:22", "03:33:29",
"07:56:34", "07:58:13", "07:59:06", "18:17:29", "18:32:23", "18:36:50"
)), class = "data.frame", row.names = c(NA, -19L))