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.

¿Cómo seleccionar sólo el primer valor no NA de cada grupo en R?

Tengo un marco de datos como este:

mydata <- data.frame(Id=c(01,01,01,01,01,01,02,02,02,02),
                     VISIT=c("Screeing","Baseline","Baseline","Baseline","Week 9","Week 9","Baseline","Week 2",
                             "Week 2","Week 2"),
                    Score=c(1,2,4,5,78,9,5,NA,3,4))

Lo que intento hacer es agrupar por Id y VISIT y elegir el primer valor no NA de cada grupo:

mydata %>%
 group_by(Id,VISIT) %>%
 mutate(first = dplyr::first(na.omit(Score)))

Pero esto no elimina las otras filas, y solo crea una nueva columna con valores repetidos del primer valor no NA de cada grupo.

El resultado esperado sería:

Id VISIT Score
<double> <fct> <double>
1 1 Screeing 1
2 1 Baseline 2
5 1 Week 9 78
7 2 Baseline 5
9 2 Week 2 3

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, debes utilizar la función summarise en lugar de mutate. Aquí tienes un código de ejemplo que debería funcionar:

    library(dplyr)
    
    mydata %>% 
      group_by(Id, VISIT) %>% 
      summarise(Score = first(na.omit(Score)))
    

    La salida debería ser:

    # A tibble: 5 x 3
    # Groups:   Id [2]
         Id VISIT    Score
      <dbl> <fct>    <dbl>
    1     1 Baseline     2
    2     1 Screeing     1
    3     1 Week 9      78
    4     2 Baseline     5
    5     2 Week 2       3
    

    Aquí, agrupamos el marco de datos por las columnas Id y VISIT, y luego utilizamos la función summarise para obtener el primer valor no-NA de cada grupo usando la función first junto con na.omit para eliminar los valores NA. Este marco de datos resultante debería tener la salida deseada.

Comments are closed.