es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.