es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar la función fill() del paquete tidyr para rellenar los valores faltantes con el valor no faltante más recientemente observado por grupo (en este caso, por Id). Aquí tienes el código para obtener el resultado esperado:

    library(tidyr)
    
    df %>% 
      group_by(Id) %>% 
      fill(Age, .direction = "down") %>% 
      fill(Age, .direction = "up")
    

    Explicación:

    • group_by(Id): Agrupa el data frame por la variable Id.
    • 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 del fill() 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.

Comments are closed.