Calcular el intervalo de tiempo hasta la primera medición dentro de los sujetos utilizando group_by().
Tengo un dataframe en formato largo con sujetos que se observan varias veces:
dat1 <- tribble(
~CODE, ~V1, ~V2, ~session, ~date,
"1111P11", 2, 3, 1, "2020-09-01",
"1111P11", 3, 2, 2, "2020-09-08",
"1111P11", 1, 3, 3, "2020-09-15",
"1111P11", 3, 4, 4, "2020-09-25",
"2222P22", 5, 1, 1, "2020-05-15",
"2222P22", 3, 2, 2, "2020-05-22",
"2222P22", 1, 4, 3, "2020-05-30",
"3333P33", 3, 4, 1, "2020-06-10",
"3333P33", 4, 1, 2, "2020-06-17",
"3333P33", 3, 5, 3, "2020-06-24",
"3333P33", 4, 2, 4, "2020-07-01",
"3333P33", 3, 4, 5, "2020-07-10"
)
dat1$date <- as.Date(dat$date)
Me gustaría calcular, para cada sujeto, el intervalo de tiempo entre cada sesión y la primera sesión, lo que debería resultar en esto:
dat2 <- tribble(
~CODE, ~V1, ~V2, ~session, ~date, ~interv.1st.sess,
"1111P11", 2, 3, 1, "2020-09-01", 0,
"1111P11", 3, 2, 2, "2020-09-08", 7,
"1111P11", 1, 3, 3, "2020-09-15", 14,
"1111P11", 3, 4, 4, "2020-09-25", 24,
"2222P22", 5, 1, 1, "2020-05-15", 0,
"2222P22", 3, 2, 2, "2020-05-22", 7,
"2222P22", 1, 4, 3, "2020-05-30", 15,
"3333P33", 3, 4, 1, "2020-06-10", 0,
"3333P33", 4, 1, 2, "2020-06-17", 7,
"3333P33", 3, 5, 3, "2020-06-24", 14,
"3333P33", 4, 2, 4, "2020-07-01", 21,
"3333P33", 3, 4, 5, "2020-07-10", 30
)
He estado tratando de resolver esto de alguna manera con group_by()
, pero no tuve éxito. ¿Hay alguna manera de hacer esto en tidyverse (u otra forma)?
davy.ai
Sí, puedes usar la función
group_by()
dedplyr
ymutate()
para crear una nueva columna con el intervalo entre cada sesión y la primera sesión para cada sujeto. Aquí está el código:Explicación:
group_by(CODE)
para agrupar los datos por sujeto.mutate()
para crear una nueva columna llamadainterv.1st.sess
y asignarle el valor de la diferencia (en días) entre la fecha de cada sesión y la fecha de la primera sesión para cada sujeto. Usamosas.numeric()
para convertir la diferencia de tiempo resultante a un número.ungroup()
para quitar la agrupación y así los datos están en su orden original.Esto debería darte el resultado deseado en
dat2
. Ten en cuenta que usamos la funcióndate()
delubridate
para convertir la columna de fecha a un formato de fecha adecuado antes de calcular las diferencias de tiempo.