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.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para intersectar múltiples vectores y obtener todas las combinaciones posibles, puedes utilizar el paquete purrr del tidyverse. Específicamente, la función reduce 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 utiliza map para generar todas las combinaciones posibles del conjunto resultante utilizando combn. 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.

Comments are closed.