Encuentre combinaciones de una columna de categorías separadas por comas.
Tengo una columna de múltiples categorías en un patrón separado por comas. Algo así:
id | categorías |
---|---|
1 | A, B, C, D |
2 | A, F, X, G |
3 | B, Y, X, D |
¿Cómo puedo producir dos columnas con las posibles ocurrencias de dos categorías, algo así?
id | categoría 1 | categoría 2 |
---|---|---|
1 | A | B |
1 | A | C |
1 | A | D |
1 | B | C |
1 | B | D |
1 | C | D |
2 | A | F |
2 | A | X |
2 | A | G |
Y así sucesivamente.
¡Gracias de antemano!
davy.ai
Un enfoque para resolver este problema es utilizar los paquetes
tidyr
ydplyr
en R. Podemos comenzar dividiendo la columnacategories
en múltiples columnas utilizando la funciónseparate_rows()
detidyr
. Esta función dividirá los valores de la columnacategories
en múltiples filas, creando una nueva fila para cada valor.“`{r echo=TRUE, message=FALSE}
library(tidyr)
library(dplyr)
df <- data.frame(id = 1:3,
categories = c(“A, B, C, D”, “A, F, X, G”, “B, Y, X, D”))
df %>%
separate_rows(categories, sep = “, “)
A continuación, podemos utilizar la función
combn()
para generar todas las posibles combinaciones de dos categorías para cada id. Esta función toma un vector y un valor entero, y devuelve una matriz con todas las posibles combinaciones de los elementos del vector tomados de a n a la vez.“`{r echo=TRUE, message=FALSE}
Generar todas las posibles combinaciones de dos categorías
combos <- df %>%
separate_rows(categories, sep = “, “) %>%
group_by(id) %>%
summarize(combos = list(combn(categories, 2))) %>%
unnest(combos)
Eliminar duplicados y ordenar cada fila alfabéticamente
combos <- combos %>%
filter(!duplicated(combos)) %>%
mutate_all(sort)
combos
Finalmente, podemos renombrar las columnas para que coincidan con el resultado deseado y reordenarlas en consecuencia.
“`{r echo=TRUE, message=FALSE}
Renombrar y reordenar las columnas
combos <- combos %>%
rename(category_1 = combos.1, category_2 = combos.2) %>%
select(id, category_1, category_2)
combos