[R-es] Combinaciones sin repetición...con restricciones

Carlos Ortega cof en qualityexcellence.es
Mie Abr 27 23:34:00 CEST 2016


Hola,

Esta es una forma de hacerlo,

#-----------------------
library(stringr)
my_choice <- function(conjunto, cual_1, cual_2) {

  #Todas combinaciones cogidas de 1, 2, ... n (número elementos de
"conjunto")
  ele_ment <- conjunto
  all_comb <- vector()
  for (i in 1:length(ele_ment)) {
    com_tmp <- combn(ele_ment, i, FUN=str_c, simplify = TRUE, collapse="_")
    all_comb <- c(all_comb, com_tmp)
  }

  #Detección de presencia de "cual_1" y "cual_2" en el conjunto...
  cu_al <- paste(cual_1,cual_2,sep="|")
  res_out <- all_comb[str_detect(all_comb, cu_al)]
  return(res_out)
}
#-----------------------

Ejemplo:

> set_examp <- c('a','b','c','d')
> my_choice(set_examp, 'a', 'b')
 [1] "a"       "b"       "a_b"     "a_c"     "a_d"     "b_c"     "b_d"
"a_b_c"
 [9] "a_b_d"   "a_c_d"   "b_c_d"   "a_b_c_d"

La función calcula todas las combinaciones sin repetición posibles y extrae
los elementos donde están presentes "cual_1" y "cual_2". No está preparada
para que pueda funcionar con un sólo "cual", pero solucionarlo no es
demasiado complejo.... así no tendrás que usar Excel para esto...

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 27 de abril de 2016, 17:48, giltrapo <giltrapo en gmail.com> escribió:

> Hola, tengo que resolver un problema para el que normalmente utilizaría
> excel, pero me gustaría intentar resolverlo con R. Se trata de lo
> siguiente:
>
> Tengo tres elementos: a, b y c.
>
> Dichos elementos están agrupados en siete objetos, producto de todas las
> combinaciones sin repetición posibles:
>
> Objeto 1: a
> Objeto 2: b
> Objeto 3: c
> Objeto 4: a y b
> Objeto 5: a y c
> Objeto 6: b y c
> Objeto 7: a, b y c
>
> Mi objetivo es obtener todas las combinaciones sin repetición posibles de
> orden n, en las que estén presentes, única y exclusivamente, los elementos
> que yo elija.
>
> Ejemplo 1: ¿en cuántas combinaciones sin repetición de los objetos
> anteriores, tomados de dos en dos, están presentes los elementos a y b
> (SÓLO a y b)?
>
> Solución:
> (Objeto 1, Objeto 2)
> (Objeto 1, Objeto 4)
> (Objeto 2, Objeto 4).
>
> Un paso más allá consistiría en obtener todas las combinaciones sin
> repetición posibles de cualquier orden, en las que estén presentes, única y
> exclusivamente, los elemento que yo elija.
>
> Ejemplo 2: ¿en cuántas combinaciones sin repetición de cualquier orden de
> los objetos anteriores están presentes los elementos a y b (SÓLO a y b)?
>
> Solución:
> (Objeto 4)
> (Objeto 1, Objeto 2)
> (Objeto 1, Objeto 4)
> (Objeto 2, Objeto 4)
> (Objeto 1, Objeto 2, Objeto 4)
>
> Para hacerlo en R me planteé el primer ejemplo: ¿en cuántas combinaciones
> sin repetición de los objetos anteriores, tomados de dos en dos, están
> presentes los elementos a y b (SÓLO a y b)?
>
> df <- as.data.frame(t(combn(c("a", "b", "c", "a,b", "a,c", "b,c",
> "a,b,c"),2)))
> df <- df[!grepl("c", df$V1),]
> df <- df[!grepl("c", df$V2),]
>
> El problema es que este código me resuelve este caso concreto, pero no
> otros similares. He intentado crear una función que me permita resolver
> otro casos, como por ejemplo el ejemplo 2, pero no doy con la forma
> adecuada de plantearlo.
>
> ¿Se os ocurre alguna forma?
>
> Muchas gracias!
>
> Jose Ignacio
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es