Ola.
Talvez se você informar como está lendo seu dados ajude, imagino que está tudo como charater, mas você pode passar esses dados para algum formato de tempo, por exemplo o posix do R, mas tem pacotes so com coisas de tempo também que podem te dar soluções até mais faceis.
Mas segue uma solução que talvez ajude.
#veja como é o tempo no R
Sys.time()
#criando seu vetor de indices
#de um ?as.POSIXct, veja uns exemplos, para converter suas colunas para tempo no formato do posix
inicio <- as.POSIXct("2015-11-10 09:31:18 AMST")
#O fim das suas coletas, daqui 30 min por exeplo
fim <- inicio + as.difftime(30, units="mins")
#e vc cria um vetor de min em min, mas poderia ser qq intervalo, de 5 em 5 min, so mudar o by
indice<-seq(from=inicio, by=as.difftime(1, units="mins"), to=fim)
#gerando alguns dados de exemplo
medida<-rnorm(100,10,2)
horario<-indice[sample(1:length(indice),100,replace=T)]
dados<-data.frame(medida,horario)
#veja os dados, imagino que no final vc vai ter medidas e o tempo
dados
#agora da pra usar cut com o indice para juntar seus dados e aggregate da forma convencional
aggregate(dados$medida,list(cut(dados$horario,indice[-1])),mean)
#ai pra normalizar, fazer outras operações, é so ir usando o fator que o cut gera pra vc