Calcule la diferencia de tiempo entre dos fechas y añádalas en una nueva columna.
Tengo un conjunto de datos con más de 1M de filas. Tiene una fecha de inicio y una fecha de fin utilizando el formato “aaaa-mm-dd hh-mm-ss”.
Deseo añadir una nueva columna al conjunto de datos con la duración del tiempo entre la fecha de fin y la fecha de inicio para cada fila.
Hasta ahora, puedo obtener la diferencia de tiempo utilizando la función “difftime”:
difftime("2020-11-01 13:45:40", "2020-11-01 13:36:00", units = "mins")
Esto me devuelve el siguiente resultado: “Diferencia de tiempo de 9,666667 minutos”, que me gustaría replicar para todo el conjunto de datos de más de 1M de filas.
Para mi prueba, estoy trabajando con una pequeña tabla. Intenté usar la función “mutate” con “rowwise” y “list”. Mi código es el siguiente:
df <- df %>%
rowwise() %>%
mutate(trip_duration = list((difftime(as.Date(df$`end time`), as.Date(df$`start time`), units = "mins"))))
Esto proporciona el siguiente resultado:
# A tibble: 3 x 3
# Rowwise:
`start time` `end time` trip_duration
<chr> <chr> <list>
1 2020-11-01 13:36 2020-11-01 13:45 <drtn [3]="">
2 2020-11-01 13:36 2020-11-01 13:45 <drtn [3]="">
3 2020-11-01 13:36 2020-11-01 13:45 <drtn [3]="">
La nueva columna no muestra lo que estoy buscando, simplemente muestra el número “3” para cada fila sin importar si pido el resultado en minutos, segundos o incluso horas, y ahora estoy atascado tratando de encontrar la forma de hacer el cálculo.
Gracias de antemano a cualquiera que pueda ayudar, ¡saludos!
davy.ai
Para resolver este problema, podemos usar la función
mutate
del paquetedplyr
para crear una nueva columna en el conjunto de datos que contenga la diferencia de tiempo entre las fechas de inicio y fin. Podemos usar la funciónas.POSIXct
para convertir las cadenas de fecha al formato POSIXct, lo que nos permite realizar operaciones aritméticas en las fechas. Aquí tienes un ejemplo de código que debería funcionar:“`{r}
library(dplyr)
suponiendo que el conjunto de datos está almacenado en un marco de datos llamado “my_data”
my_data %>%
mutate(start_date = as.POSIXct(start_date),
end_date = as.POSIXct(end_date),
duration = difftime(end_date, start_date, units = “mins”))
Este código funciona de manera similar al código
dplyr
, pero utiliza la sintaxis dedata.table
. Primero convertimos las columnasstart_date
yend_date
al formato POSIXct utilizandoas.POSIXct
, y luego utilizamos el operador:=
para crear una nueva columna llamadaduration
que contiene la diferencia de tiempo en minutos. Una vez más, no es necesario utilizarrowwise()
olist()
en este código.¡Espero que esto te ayude! Déjame saber si tienes alguna otra pregunta.