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.

Contar combinaciones agrupadas por otra variable

Tengo un dataframe con el siguiente formato

col1 col2
X A
X B
X C
Y B
Y C
Z A
Z C
Z D

Para cada elemento de col1 quiero construir una columna con todas las combinaciones de tamaño 2 de col2. Por ejemplo, para combinaciones de tamaño 2, el resultado se vería así:

col1 col2
X (A, B)
X (A, C)
X (B, C)
Y (B, C)
Y (B, C)
Z (A, C)
Z (A, D)
Z (C, D)

¿Cómo puedo hacer esto?

¡Gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para construir una columna con todas las combinaciones de tamaño 2 de la columna “col_2” para cada elemento de “col_1”, se puede utilizar la función combn() de R base, junto con la cadena de comandos dplyr.

    library(dplyr)
    
    # crear datos de muestra
    df <- data.frame(
      col_1 = c("X", "X", "X", "Y", "Y", "Z", "Z", "Z"),
      col_2 = c("A", "B", "C", "B", "C", "A", "C", "D")
    )
    
    # agrupar por col_1 y aplicar la función combn a col_2
    df_combinations <- df %>%
      group_by(col_1) %>%
      summarize(col_2 = list(t(combn(col_2, 2)))) %>%
      unnest()
    
    # Resultado
    # # A tibble: 9 x 2
    #   col_1 col_2   
    #   <chr> <chr>   
    # 1 X     A, B    
    # 2 X     A, C    
    # 3 X     B, C    
    # 4 Y     B, C    
    # 5 Y     B, C    
    # 6 Z     A, C    
    # 7 Z     A, D    
    # 8 Z     C, D  
    

    Explicación: La función group_by() agrupa los datos por col_1 y la función summarize() aplica la función combn() a cada grupo. El resultado de combn() es una matriz con todas las combinaciones de tamaño 2. La función list() convierte la matriz en una lista y la función t() la transpone. Por último, la función unnest() aplanar la lista en un dataframe.

Comments are closed.