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.

Tidyverse: Reduzca las variables por grupo.

Tengo un marco de datos que se ve así:

ID pick1 pick2 pick3
1 NA 21/11/29 21/11/30
2 21/11/28 21/11/29 NA
3 21/11/28 NA 21/11/30
4 NA 21/11/29 21/11/30

Cada participante (ID) pudo elegir 2 fechas de 3 opciones. Ahora quiero resumir las fechas seleccionadas para obtener un tibble como este:

ID date1 date2
1 21/11/29 21/11/30
2 21/11/28 21/11/29
3 21/11/28 21/11/30
4 21/11/29 21/11/30

Sin embargo, no puedo hacer que funcione solo con las funciones de tidyverse. He empezado a usar esta biblioteca pero no pude encontrar una solución para mi problema en línea.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la función gather() del paquete tidyr para transformar el marco de datos al formato largo, luego eliminar las filas con valores NA, agrupar por ID y seleccionar las primeras y segundas fechas utilizando slice() y mutate(), y finalmente volver a dar forma a los datos al formato ancho utilizando spread(). Aquí hay un código de ejemplo:

    library(tidyr)
    library(dplyr)
    
    df %>%
      gather(key = "pick_num", value = "date", pick1:pick3) %>% # transformar al formato largo
      drop_na(date) %>% # eliminar filas con valores NA
      group_by(ID) %>% 
      slice(1:2) %>% # seleccionar la primera y segunda fecha por ID
      mutate(pick_num = paste0("date", row_number())) %>% # crear columna con rangos de fecha
      spread(key = "pick_num", value = "date") %>% # dar forma al formato ancho
      select(ID, date1, date2) # seleccionar las columnas deseadas
    

    Esto debería darle el tibble deseado:

    “`r

    A tibble: 4 x 3

    Groups: ID [4]

     ID date1     date2    
    


    1 1 21/11/29 21/11/30
    2 2 21/11/28 21/11/29
    3 3 21/11/28 21/11/30
    4 4 21/11/29 21/11/30
    “`

Comments are closed.