
Tengo datos recopilados de un pluviómetro en el siguiente formato:
Marca de tiempo de datos de índice
1. 0 2020-01-05T00:00:00
2. 0 2020-01-05T01:00:00
3. 1 2020-01-05T01:20:15
4. 0 2020-01-05T02:00:00
5. 1 2020-01-05T02:09:00
6. 1 2020-01-05T02:09:45
7. 1 2020-01-05T02:20:00
8. 1 2020-01-05T02:20:01
9. 0 2020-01-05T03:00:00
Me gustaría sumar los datos consecutivos cada 30 minutos. Algo como lo siguiente:
Marca de tiempo de datos de índice
1. 0 2020-01-05T00:00:00
2. 0 2020-01-05T00:30:00
3. 0 2020-01-05T01:00:00
4. 1 2020-01-05T01:30:00
5. 0 2020-01-05T02:00:00
6. 4 2020-01-05T02:30:00
7. 0 2020-01-05T03:00:00
Ya obtuve solo el tiempo de 24 horas de la marca de tiempo y traté de determinar si restar 2 marcas de tiempo es menos de 30 minutos según la siguiente fórmula:
=IF(((time)-(time-1))<=0.020833,"ok","not within 30min interval")
La fórmula de Excel que tenía en mente era obtener algo similar a una SUMIFS
función que sumaría todos los valores consecutivos dentro de un intervalo de 30 minutos.
Intenté implementar algún tipo de COUNTIF
verificación de datos consecutivos dentro del intervalo de 30 minutos y traté de resolver una función SUMIFS
y una SUMPRODUCT
, pero estoy luchando por unir las cosas y con la lógica.
Gracias
Respuesta1
Puedes utilizar esta fórmula:
=DATEVALUE(SUBSTITUTE(C2,"T"," "))+CEILING.MATH(ROUND(TIMEVALUE(SUBSTITUTE(C2,"T"," ")),5),"0:30")
Desglosado en pasos:
Para que Excel reconozca el texto como fecha/hora, elimine la T:
=SUSTITUIR(C2,"T"," ")
Para obtener la fecha de esa fecha/hora:
=FECHAVALOR(D2)
Para obtener la hora a partir de esa fecha/hora:
=RONDA(VALOR DE TIEMPO(D2),5)
(Explicaré por qué se necesita la REDONDA aquí un poco más abajo)
Para calcular el siguiente incremento de 30 minutos:
=TECHO.MATEMÁTICAS(RONDA(VALOR DE TIEMPO(SUSTITUTO(C2,"T"," ")),5),"0:30")
Luego, al concatenar la fecha con el incremento de 30 minutos, obtendrá la fórmula en la parte superior de la respuesta. Luego puede girar la tabla para sumar el valor por incremento.
Nota sobre la llamada a ROUND en el paso 3:
Cuando escribí la fórmula por primera vez, no usé ROUND en el paso 3, pero descubrí que el incremento que salía para las 2:00:00 era 2:30:00, lo cual no era correcto. Durante la inspección, descubrí que la función TIMEVALUE no devolvía el nivel correcto de precisión. Redondear a 5 decimales solucionó ese problema.
EDITAR:
Como tienes Excel 365, supongo que también tienes acceso a la función SECUENCIA.
Para agregar sin una tabla dinámica, puede hacer lo siguiente (suponiendo que no tenga una lista preexistente de incrementos):
- Calcule el número de incrementos de 30 minutos entre el grupo de marca de tiempo MIN y el grupo de marca de tiempo MAX
- Cree una secuencia que contenga esa cantidad de incrementos (para que también se representen los incrementos que no están en los datos de origen)
- Utilice SUMIF para consultar los datos de origen y sumar los datos por TimestampGroup
- Opcionalmente, cree un GroupIndex para la tabla agregada.
Las fórmulas en la tabla agregada son:
Índice de grupo:
=SEQUENCE((MAX($D$3:$D$11)-MIN($D$3:$D$11))*48+1)
Esto simplemente le indica cuántos incrementos de 30 minutos hay entre el TimestampGroup más pequeño y el TimestampGroup más grande y devuelve una secuencia entera para esa cantidad de incrementos.
Grupo de marca de tiempo:
=SEQUENCE((MAX($D$3:$D$11)-MIN($D$3:$D$11))*48+1,1,MIN($D$3:$D$11),1/48)
Nuevamente, usando la función de secuencia, devuelva una lista de TimestampGroups, pero en lugar de comenzar la secuencia en 1 e incrementar en 1, que son los parámetros tercero y cuarto predeterminados, inicie la secuencia en el TimestampGroup mínimo e incremente en 30 minutos, que es 1/48 de día.
Valor:
=SUMIF($D$3:$D$11,$F16,$B$3:$B$11)
Sume la columna Datos para las filas indicadas por TimestampGroup en la fila actual de la tabla agregada.