Cómo obtener datos para un valor de 7 días o 10 días de antigüedad en R?
Estoy tratando de buscar un valor de 7 días atrás de los datos, pero no puedo filtrar el valor utilizando dplyr o base R.
“`{r}
library(nycflights13)
library(tidyverse)
library(lubridate)
nycflights13::flights %>%
mutate(date = ymd(paste(year,"-",month,"-",day))) %>%
dplyr::select(date, carrier, flight, origin, dest, arr_delay) %>%
group_by(carrier, flight, origin, dest) %>%
arrange(desc(date)) %>%
mutate(old_delay = .[.$date – 7, "arr_delay"])
# mutate(old_delay = . %>% filter(date – 7) %>% select(arr_delay))
“`
ERROR
Error: Problema con la columna old_delay
en mutate()
.
i old_delay = .[.$date - 7, "arr_delay"]
.
x Se deben seleccionar las filas con un vector de subíndice válido.
x El subíndice i
tiene el tipo incorrecto date
.
i Debe ser lógico, numérico o de tipo character.
i El error ocurrió en el grupo 1: carrier = “9E”, flight = 2900, origin = “JFK”, dest = “BNA”.
¿Cómo puedo obtener los valores antiguos en una nueva columna? ¿Necesito usar apply dentro de mutate?
También he revisado el paquete zoo
, donde se utilizan las ventanas de tiempo, pero no pude encontrar una función para obtener el valor exacto.
Resultado deseado:
nycflights
puede que no sea un conjunto de datos adecuado para esto. Pero piense en esto como un conjunto de datos de acciones donde trato de encontrar el valor de cierre de la acción 7 días antes para poder calcular el cambio porcentual desde cada día hasta su valor antiguo de 7 días.
davy.ai
Para obtener un subconjunto de un valor hace 7 días a partir de los datos utilizando dplyr, puedes usar la función
lag()
. Así es cómo puedes modificar tu código para agregar una nueva columna llamadaold_delay
que contiene el valor dearr_delay
de hace 7 días:“`{r}
nycflights13::flights %>%
mutate(date = ymd(paste(year,”-“,month,”-“,day))) %>%
select(date, carrier, flight, origin, dest, arr_delay) %>%
group_by(carrier, flight, origin, dest) %>%
arrange(desc(date)) %>%
mutate(old_delay = lag(arr_delay, 7))
Aquí, utilizamos
arrange(date)
en lugar dearrange(desc(date))
porque queremos que el marco de datos esté ordenado por fecha en orden ascendente. Luego, calculamos el cambio porcentual como(arr_delay - old_delay) / old_delay * 100
y almacenamos el resultado en una nueva columna llamadachange_pct
.¡Espero que esto te ayude! Avísame si tienes más preguntas.