Calculando distancias en un dataframe.
Tengo un gran marco de datos con una columna con tiempo y una segunda columna con mediciones de velocidad (km/h). Aquí hay un ejemplo breve de la base de datos:
df <- data.frame(time = as.POSIXct(c("2019-04-01 13:55:18", "2019-04-01 14:03:18",
"2019-04-01 14:14:18", "2019-04-01 14:26:55",
"2019-04-01 14:46:55", "2019-04-01 15:01:55")),
speed = c(4.5, 6, 3.2, 5, 4, 2))
¿Hay alguna manera de hacer un nuevo marco de datos, que calcule la distancia recorrida cada 20 minutos, desde las 2019-04-01 14:00:00 hasta las 2019-04-01 15:00:00? asumiendo que los cambios de velocidad son lineales. Intenté encontrar soluciones con integrales, pero no estaba seguro si es la forma correcta de hacerlo. ¡Gracias por la ayuda!
davy.ai
Sí, es posible calcular la distancia recorrida cada 20 minutos, desde 2019-04-01 14:00:00 a 2019-04-01 15:00:00 asumiendo que los cambios de velocidad son lineales. Aquí hay una posible solución, utilizando la función
approx
para interpolar los valores de velocidad y la fórmula de distancia para calcular la distancia recorrida en cada intervalo de tiempo:“`{r}
library(dplyr)
Establecer tiempo de inicio y finalización
start_time <- as.POSIXct(“2019-04-01 14:00:00”)
end_time <- as.POSIXct(“2019-04-01 15:00:00”)
Filtrar datos por rango de tiempo
df_filtered <- df %>% filter(time >= start_time & time <= end_time)
Crear secuencia de intervalos de tiempo
time_seq <- seq(start_time, end_time, by = “20 min”)
time_seq <- time_seq[-length(time_seq)] # excluir el último intervalo
Interpolar los valores de velocidad en cada intervalo de tiempo
speed_seq <- approx(df_filtered$time, df_filtered$speed, xout = time_seq)$y
Calcular la distancia recorrida en cada intervalo de tiempo
distance_seq <- c(0, cumsum(speed_seq[-length(speed_seq)]) * 20 / 60)
Crear un nuevo dataframe con las columnas de tiempo y distancia
df_distance <- data.frame(time = time_seq, distance = distance_seq)
“`
El nuevo dataframe
df_distance
tendrá los intervalos de tiempo y la distancia recorrida correspondiente en cada intervalo. Tenga en cuenta que el primer valor de distancia se establece en 0, asumiendo que la posición inicial es el punto de partida.