R: Calcular una suma continua en series temporales irregulares agrupadas por variables de identificación con ventana basada en el tiempo

Me encanta R pero algunos problemas son simplemente difíciles.

El desafío es encontrar la primera instancia de una suma continua que sea menor que 30 en una serie temporal irregular que tenga una ventana basada en el tiempo mayor o igual a 6 horas. Tengo una muestra de la serie

Row Person  DateTime    Value
1   A   2014-01-01 08:15:00 5
2   A   2014-01-01 09:15:00 5
3   A   2014-01-01 10:00:00 5
4   A   2014-01-01 11:15:00 5
5   A   2014-01-01 14:15:00 5
6   B   2014-01-01 08:15:00 25
7   B   2014-01-01 10:15:00 25
8   B   2014-01-01 19:15:00 2
9   C   2014-01-01 08:00:00 20
10  C   2014-01-01 09:00:00 5
11  C   2014-01-01 13:45:00 1
12  D   2014-01-01 07:00:00 1
13  D   2014-01-01 08:15:00 13
14  D   2014-01-01 14:15:00 15

For Person A, Rows 1 & 5 create a minimum 6 hour interval with a running sum of 25 (which is less than 30).
For Person B, Rows 7 & 8 create a 9 hour interval with a running sum of 27 (again less than 30).
For Person C, using Rows 9 & 10, there is no minimum 6 hour interval (it is only 5.75 hours) although the running sum is 26 and is less than 30.
For Person D, using Rows 12 & 14, the interval is 7.25 hours but the running sum is 30 and is not less than 30.

Dadas n observaciones, hay n * (n-1) / 2 intervalos que deben compararse. Por ejemplo, con n = 2 solo hay 1 intervalo para evaluar. Para n = 3 hay 3 intervalos. Y así.

Supongo que esta es una variación del problema de suma de subconjuntos (http://en.wikipedia.org/wiki/Subset_sum_problem)

Si bien los datos se pueden ordenar, sospecho que esto requiere una solución de fuerza bruta que pruebe cada intervalo.

Cualquier ayuda sería apreciada.

Editar: aquí están los datos con la columna DateTime formateada como POSIXct:

df <- structure(list(Person = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), 
DateTime = structure(c(1388560500, 1388564100, 1388566800, 
1388571300, 1388582100, 1388560500, 1388567700, 1388600100, 
1388559600, 1388563200, 1388580300, 1388556000, 1388560500, 
1388582100), class = c("POSIXct", "POSIXt"), tzone = ""), 
Value = c(5L, 5L, 5L, 5L, 5L, 25L, 25L, 2L, 20L, 5L, 1L, 
1L, 13L, 15L)), .Names = c("Person", "DateTime", "Value"), row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14"), class = "data.frame")

Respuestas a la pregunta(3)

Su respuesta a la pregunta