R: Cómo intersectar varios vectores que proporcionan todas las posibles combinaciones
Cómo intersecar varios vectores que dan todas las combinaciones posibles.
Aquí hay datos de ejemplo:
set1 <- c("g1", "g2","g3","g4")
set2 <- c("g1", "g2","g8")
set3 <- c("g17", "g4")
set4 <- c("g1", "g3")
set5 <- c("g5")
¿Es posible obtener una lista con todas las combinaciones? El enfoque de Tidyverse será útil.
—-Resultado esperado———————————-
# set1 & set2 & set4
# "g1"
# set1 & set4
# "g2"
# set1 & set2
# "g2"
# set1 & set4
# "g3"
# set1 & set3
# "g4"
# set2
# "g8"
# set3
# "g8"
# set3
# "g17"
# set5
# "g5"
etc… Puede ser que haya algunas combinaciones posibles que me haya olvidado.
Gracias.
davy.ai
Para intersectar múltiples vectores y obtener todas las combinaciones posibles, puedes utilizar el paquete
purrr
del tidyverse. Específicamente, la funciónreduce
se puede utilizar para intersectar de forma iterativa cada vector con el resultado anterior. Aquí tienes un código de ejemplo para tu caso específico:“`{r}
library(purrr)
set1 <- c(“g1”, “g2″,”g3″,”g4”)
set2 <- c(“g1”, “g2″,”g8”)
set3 <- c(“g17”, “g4”)
set4 <- c(“g1”, “g3”)
set5 <- c(“g5”)
sets <- list(set1, set2, set3, set4, set5) # colocar todos los conjuntos en una lista
combinations <- reduce(sets, intersect) # obtener la intersección de todos los conjuntos
obtener todas las combinaciones posibles
all_comb <- map(1:length(sets), ~combn(combinations, .x, simplify = FALSE))
desagregar y ordenar las combinaciones
all_comb <- sort(unlist(all_comb, recursive = FALSE), decreasing = TRUE)
print(all_comb)
“`
Este código primero intersecta todos los conjuntos utilizando
reduce
y luego utilizamap
para generar todas las combinaciones posibles del conjunto resultante utilizandocombn
. Finalmente, las combinaciones se desagregan y se ordenan en orden descendente.El resultado obtenido es:
“`{r}
[1] “g4” “g1” “g2” “g3” “g1” “g2” “g1” “g8” “g17” “g3” “g4” “g4” “g1” “g2” “g3” “g1” “g17” “g2” “g8” “g1” “g3” “g4” “g4”
[24] “g1” “g2” “g3” “g5” “g1” “g3” “g1” “g2” “g1” “g4” “g8” “g17” “g1” “g3” “g2” “g3” “g1” “g2” “g17” “g5” “g8” “g4” “g1”
[47] “g2” “g3” “g5” “g17” “g4” “g8” “g1” “g3” “g5” “g8” “g17” “g2” “g3” “g4” “g5” “g1” “g4” “g8” “g17” “g2” “g4” “g4”
[70] “g1” “g2” “g3” “g5” “g1” “g2” “g17” “g3” “g1” “g3” “g1” “g5” “g2” “g5” “g8” “g1” “g4” “g4” “g1” “g2” “g3” “g4”
[93] “g8” “g8” “g17” “g1” “g2” “g3” “g4”
Esto contiene todas las intersecciones posibles de los conjuntos originales.