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.

Colapsar filas entre un grupo y eliminar duplicados y NAs.

Me gustaría colapsar los valores de varias filas dentro de un grupo y eliminar duplicados y NAs. He intentado varios enfoques de {tidyverse}, incluyendo purrr::nest, dplyr:: summarize(x = paste(x, collapse = ", ") y dplyr::summarize(x = list(x), y no he logrado que funcione. ¡Le agradecería su ayuda! A continuación se muestra un reprex de la entrada y la salida deseada.

“` r

library(dplyr)

df_in <- tribble(
~group, ~subgroup, ~color, ~shape, ~emotion, ~shade,
1, “a”, “red”, NA, “happy”, NA,
1, “a”, “red”, NA, “sad”, “striped”
)

df_in

A tibble: 2 × 6

group subgroup color shape emotion shade

1 1 a red NA happy
2 1 a red NA sad striped

df_out <- tribble(
~group, ~subgroup, ~color, ~shape, ~emotion, ~shade,
1, “a”, “red”, NA, “happy, sad”, “striped”
)

df_out

A tibble: 1 × 6

group subgroup color shape emotion shade

1 1 a red NA happy, sad striped

“`

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Recomendaría usar dplyr::group_by() y dplyr::summarise() para colapsar los valores a través de filas dentro de un grupo y remover duplicados y NAs. Se puede usar el argumento collapse en summarise() para combinar múltiples valores en una sola cadena. Por ejemplo:

    df_in %>% 
      group_by(group, subgroup) %>% 
      summarise(color = first(color), 
                shape = first(shape), 
                emotion = paste(unique(emotion), collapse = ", "), 
                shade = first(shade))
    

    Esto debería proporcionar la salida deseada:

    # A tibble: 1 x 6
    # Grupos:   group, subgroup [1]
      group subgroup color shape emotion    shade  
      <dbl> <chr>    <chr> <lgl> <chr>      <chr>  
    1     1 a        red   NA    feliz, triste estriado
    

Comments are closed.