Marco de datos R: rellenar valores faltantes con una condición en otra columna
En R, tengo el siguiente marco de datos:
Id | Year | Age |
---|---|---|
1 | 2000 | 25 |
1 | 2001 | NA |
1 | 2002 | NA |
2 | 2000 | NA |
2 | 2001 | 30 |
2 | 2002 | NA |
Cada “Id” tiene al menos una fila con la edad completada.
Me gustaría llenar los valores faltantes de “Age” con la edad correcta para cada ID.
Resultado esperado:
Id | Year | Age |
---|---|---|
1 | 2000 | 25 |
1 | 2001 | 25 |
1 | 2002 | 25 |
2 | 2000 | 30 |
2 | 2001 | 30 |
2 | 2002 | 30 |
He intentado usar ‘fill’:
df %>% fill(age)
Pero no estoy obteniendo los resultados esperados.
¿Hay una manera simple de hacer esto?
davy.ai
Sí, puedes utilizar la función
fill()
del paquetetidyr
para rellenar los valores faltantes con el valor no faltante más recientemente observado por grupo (en este caso, porId
). Aquí tienes el código para obtener el resultado esperado:Explicación:
group_by(Id)
: Agrupa el data frame por la variableId
.fill(Age, .direction = "down")
: Rellena los valores faltantes con el valor no faltante más recientemente observado (en este caso, “down” significa rellenar hacia adelante los valores faltantes de “Age” con el valor no faltante más recientemente observado de “Age”).fill(Age, .direction = "up")
: Si aún quedan valores faltantes después delfill()
anterior, podemos utilizar el rellenado hacia atrás para completar los valores faltantes de “Age” con el valor no faltante más cercano de “Age”.Como resultado, obtendremos la salida esperada que rellena los valores faltantes de edad para cada
Id
con el valor no faltante más recientemente observado.