Как рассчитать среднее время в кадре данных в R - PullRequest
0 голосов
/ 12 февраля 2020

извините за мой английский sh, я новичок в программировании на R. У меня есть эти данные в csv

DATA1       DATA2
PAPERINO    05:29:29
PAPERINO    04:43:47
PAPERINO    04:43:47
PAPERINO    03:27:46
PIPPO000    00:27:07
PIPPO000    00:27:07
PIPPO000    00:27:07
PIPPO000    00:27:07
PIPPO000    00:26:04
PIPPO000    00:26:04
PIPPO000    00:26:04
BALUBABA    03:02:22
BALUBABA    03:33:29
ZORROBIS    07:56:34
ZORROBIS    07:58:13
ZORROBIS    07:59:06
ZORROBIS    18:17:29
ZORROBIS    18:32:23
ZORROBIS    18:36:50

Я хочу group_by DATA1 и рассчитать среднее значение для каждого объекта на основе 24 часов.

Пример результата для ZORROBIS Я хочу, чтобы два результата были одинаковыми в моем Excel :

ZORROBIS    07:57:58
ZORROBIS    18:28:54

Я использовал dplyr и lubridate, но безуспешно. Спасибо всем, кто может помочь мне получить желаемый результат.

1 Ответ

0 голосов
/ 12 февраля 2020

Мы можем использовать 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...