Попробуйте сделать воспроизводимый пример здесь. Я сделал data.frame с первым столбцом времени, во втором столбце любое количество, которое вы хотите усреднить.
Time Whatever
1 10:00 17
2 10:02 119
3 10:04 98
4 10:06 94
5 10:08 219
6 10:10 71
С помощью stringr мы можем выделить час как числовое, а остальное - просто арифметическое.
library(stringr)
data = data.frame(Time=c("10:00", "10:02", "10:04", "10:06", "10:08", "10:10", "10:12", "10:14",
"10:16", "10:18", "10:20", "10:22", "10:24", "10:26", "10:28",
"10:30", "10:32", "10:34", "10:36", "10:38", "10:40", "10:42",
"10:44", "10:46", "10:48", "10:50", "10:52", "10:54", "10:56",
"10:58", "11:00", "11:01", "11:02", "11:03", "11:04", "11:05", "11:06",
"11:07", "11:08", "11:09", "11:10", "11:11", "11:12", "11:13", "11:14",
"11:15", "11:16", "11:17", "11:18", "11:19", "11:20", "11:21",
"11:22", "11:23", "11:24", "11:25", "11:26", "11:27", "11:28",
"11:29", "11:30", "11:31", "11:32", "11:33", "11:34", "11:35",
"11:36", "11:37", "11:38", "11:39", "11:40", "11:41", "11:42",
"11:43", "11:44", "11:45", "11:46", "11:47", "11:48", "11:49",
"11:50", "11:51", "11:52", "11:53", "11:54", "11:55", "11:56",
"11:57", "11:58", "11:59", "15:00", "15:10", "15:20", "15:30",
"15:40", "15:50", "16:00", "16:20", "16:40", "16:50")
,Whatever=c(17, 119, 98, 94, 219, 71, 38, 31, 8, 48, 139, 48, 90, 2, 40,
130, 164, 66, 14, 218, 13, 31, 177, 55, 74, 75, 17, 167, 0, 21,
56, 132, 138, 183, 94, 81, 1, 85, 25, 148, NA, 129, 25, 139,
84, 15, 41, 226, 79, 215, 26, 218, 23, 119, 102, 31, 195, 73,
50, 148, 29, 21, 154, 73, 114, 44, 80, 80, 86, 48, 52, 44, 106,
124, 43, 43, 174, 47, 214, 202, 111, 13, 96, 153, 59, 83, 20,
134, 163, 4, 59, 147, 71, 119, 113, 188, 19, 195, NA, 101), stringsAsFactors=F)
thour = as.numeric(str_extract(data$Time,'\\d{2}(?=:)'))
x = c(0,which(diff(thour) != 0),length(thour))
n = length(x)-1
interval = list()
for (i in 1:n) interval[[i]] = c(x[i]+1,x[i+1],thour[x[i+1]])
u1 = sapply(interval,function(j) j[3])
u2 = sapply(interval,function(j) mean(data$Whatever[j[1]:j[2]],na.rm=T))
data.frame(hour=u1,average=u2)
Наконец-то вы получите что-то вроде. Это также позволяет избежать проблемы усреднения данных за один и тот же час в другой день.
hour average
1 10 76.13333
2 11 93.13559
3 15 116.16667
4 16 105.00000
Значит, у вас есть данные за несколько дней, измеренные каждую минуту или около того? Вам нужно будет добавить идентификатор для каждого нового дня, если это так. Затем вы можете сделать что-то вроде http://stackoverflow.com/questions/22368796/aggregating-minutes-to-hour-demand-r/22369242 – thelatemail
Если ваши данные занимают несколько дней, откуда вы знаете, когда определенное время находится на другой день в другое время? Ваши строки в дате-времени-порядке или что-то еще? и вы никогда не пропустите больше дня? если у меня есть строка «13:00», за которой следует строка «14:00», это вторая строка, гарантированная в тот же день, что и первая, или же можно сказать день в будущем (через 25 часов)? –
Моя догадка (tm): она заказана, и вам нужно добавить один день для каждой разности (время) <0 –