Tengo un marco de datos con datos COVID y estoy tratando de hacer una columna que calcule la cantidad de personas recuperadas en función de la cantidad de pruebas positivas.
Mis datos tienen una ubicación, una fecha y la cantidad de pruebas administradas / resultados positivos / resultados negativos cada día. Aquí hay algunas líneas que usan una ubicación como ejemplo (los datos reales tienen fechas de varios meses):
loc date tests pos neg active
spot1 2020-04-10 1 1 0 5
spot1 2020-04-11 2 1 1 6
spot1 2020-04-12 0 0 0 6
spot1 2020-04-13 11 1 10 7
Quiero crear una nueva columna que cuente de manera acumulativa cada prueba positiva en cada ubicación 14 días después de que se registre. El 24-04-2020, las 5 clases activas ya no están activas, por lo que quiero una columna recuperada con 5. Para cada fecha, quiero que se agreguen los nuevos casos no activos.
Mi primer pensamiento fue probarlo en un bucle:
df1 <- df %>%
mutate(date = as.Date(date)) %>%
group_by(loc) %>%
mutate(rec = for (i in 1:nrow(df)) {
#getting number of new cases
x <- df$pos[i]
#add 14 days to the date
d <- df$date + 14
df$rec <- sum(x)
})
Como puede ver, no soy el mejor escribiendo para bucles. Eso me da un montón de números, pero tiene muy poca relación significativa con los datos.
También lo probé con map_dbl:
df1 <- df %>%
mutate(date = as.Date(date)) %>%
group_by(loc) %>%
mutate(rec = map_dbl(date, ~sum(pos[(date <= . + 14) & date >= .])))
Lo que resultó en el mismo número impreso en toda la columna rec.
¿Alguna sugerencia? (Perdón por la larga explicación, solo quiero asegurarme de que todo esto tenga sentido)
Sus datos de muestra muestran que:
0
pruebas (12 de abril)Active
La columna parece ya una cumsum
Por lo tanto, creo que simplemente puedes usar la lag
función con argumento14
código de ejemplo
df %>% group_by(loc) %>% mutate(recovered = lag(active, 14)) %>% ungroup()
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras