[R-es] Consulta filtro múltiple.

juan manuel dias ju@m@d|@@ @end|ng |rom gm@||@com
Lun Jul 5 19:52:16 CEST 2021


Hola, como andan!

Estaba trabajando nuevamente con esto....y pensaba que teniendo un data
frame por separado con las monodrogas y unidades que tengo que filtrar, lo
podría
resolver con un simple inner join de dplyr.

prueba_2<-base_precios_jun_2021_final %>%
  inner_join(mono_unid)
view(prueba_2)

En base_precios_jun_2021_final está el data frame completo con todas las
variables, que incluye monodroga y unidades, y en  "mono_unid" tengo un
data frame en
formato longer con las monodrogas y unidades que necesito filtrar.

Saludos, Juan.



El vie, 2 jul 2021 a las 4:49, Isidro Hidalgo Arellano (<ihidalgo using jccm.es>)
escribió:

> ¡Muchas gracias, Carlos!
>
> Entonces, los tiempos que pusiste al principio, en los que había grandes
> diferencias, ¿de dónde salieron?
>
> ¡Muchas gracias, como siempre, por tus grandes aportaciones!
>
>
>
> Isidro Hidalgo Arellano
>
> Observatorio del Mercado de Trabajo
>
> Consejería de Economía, Empresas y Empleo
>
> http://www.castillalamancha.es/
>
>
>
> De: Carlos Ortega <cof using qualityexcellence.es>
> Enviado el: jueves, 1 de julio de 2021 16:19
> Para: Isidro Hidalgo Arellano <ihidalgo using jccm.es>
> CC: Lista R <r-help-es using r-project.org>
> Asunto: Re: [R-es] Consulta filtro múltiple.
>
>
>
> Hola,
>
>
>
> Pues al final he terminado haciéndolo... :-)
>
>
>
> Usando el paquete "babynames" que tiene casi dos millones de nombres y su
> frecuencia de aparición por año, se puede establecer la equivalencia de que
> los nombres son los medicamentos y las frecuencias son los valores que
> quiero encontrar.
>
>
>
> Con este código, puedo seleccionar el número de nombres (medicamentos) a
> buscar y automáticamente también selecciona los valores.
>
> El código también permite crear el número de condiciones que puedo crear
> (las condiciones pueden ser iguales o menores al número de nombres).
>
>
>
> Y con todo eso, ya puedo comparar cómo de rápido son data.table, dplyr y
> base de forma comparada, considerando diferentes número de condiciones
> lógicas, sobre este conjunto de datos que ya es algo más que 10 líneas.
>
>
>
> #-------------
>
>
> library(babynames)
> library(dplyr)
> library(data.table)
> library(tictoc)
> library(microbenchmark)
>
> midt <- setDT(copy(babynames))
> midf <- as.data.table(midt)
>
> #--- Ejemplo de condiciones que se buscan
> # Elizabeth == 8915
> # Michael == 88514
> # David == 86251
>
> # Selecciono nombres y su frecuencia (primera aparición) aleatoriamente
> NUM_NOMBRES <- 1000
> all_nam <- unique(midt[ , .(name)])
> rnd_idx <- sample(1:nrow(all_nam), NUM_NOMBRES, replace = FALSE)
> mi_names <- all_nam[ rnd_idx, .(name)]
> mi_value <- midt[ name %chin% mi_names$name, .(n), by = name] %>%
>                  .[ , .SD[1], by = name]
>
> #--- Crear condiciones automáticamente
> #-- cond_end == Condiciones para data.table y dplyr
> #-- cond_bas == Condiciones para base
> NUM_CONDICIONES <- 50
> cond_end <- vector()
> cond_bas <- vector()
> for (i in 1:NUM_CONDICIONES) {
>   name_val <- mi_value$name[i]
>   n_val    <- mi_value$n[i]
>   if (i < num_cond) {
>       mi_cond  <- paste("( name == '" , name_val, "' & n == ", n_val, " )
> | ", sep = "")
>       mi_cond2 <- paste("( midf$name == '" , name_val, "' & midf$n == ",
> n_val, " ) | ", sep = "")
>   } else {
>       mi_cond  <- paste(" ( name == '" , name_val, "' & n == ", n_val, "
> )", sep = "")
>       mi_cond2 <- paste(" ( midf$name == '" , name_val, "' & midf$n == ",
> n_val, " )", sep = "")
>   }
>   cond_end <- paste0(cond_end, mi_cond, collapse = "\n")
>   cond_bas <- paste0(cond_bas, mi_cond2, collapse = "\n")
> }
>
> #------- COMPARACIONES ---------------
> #-- data.table
> tic()
> midt[ eval(parse(text = cond_end )), ]
> toc()
>
> #-- dplyr
> midf <- as.data.frame(midt)
> tic()
> midf %>%
>   filter( eval(parse(text = cond_end )), )
> toc()
>
> #--- base
> tic()
> midf[ eval(parse(text = cond_bas )), ]
> toc()
>
>
> #------- BENCHMARKINGS --------------
> microbenchmark(
>   data.table = midt[ eval(parse(text = cond_end )), ] ,
>   base       = midf[ eval(parse(text = cond_bas )), ] ,
>   dplyr      = midf %>% filter( eval(parse(text = cond_end )), ) ,
>   times = 25
> )
>
>
>
> #------------
>
>
>
> Los tiempos que he obtenido para 50 condiciones lógicas, evaluados 25
> veces...
>
>
>
> Unit: seconds
>        expr      min       lq     mean   median       uq      max neval
>  data.table 1.481466 1.543330 1.622688 1.598947 1.679465 1.866847    25
>        base 1.518659 1.560412 1.621398 1.592776 1.641903 1.798532    25
>       dplyr 1.505253 1.530137 1.571444 1.554524 1.597147 1.714049    25
>
>
>
>
>
>
>
> Gracias,
>
> Carlos Ortega
>
>
> http://secure-web.cisco.com/190P89zEZCZg27zm--Pzdemoj-uaSTLJwnn27fi161HUE-cXUu0gxmnbJK84Jb_ku-3DYJtt0nYjUfXsdh88VdePSLOtQCDzI0IRf2P0Q1dw0G2luzk8x2FbOx4dJ5Dx5_HtngsrqD7P9qY9S9Iv1IrpkL7AYkr_UQbrVjLHQtQ7KC9Z8nxbygLfSTQtxw8S_9Z2jJ_7LFUdX8ew_68GEv5ImC6lxtJGguR_RYMvEED2CxRLWJ1lVSlq1DfuzHgsv62S0-wUkYSMH3UJXsJeC-80lLiShNMN-N4Rw1rEIEvc294fZ8sGQ1zFawzp_Sfn395zK2PnX3xOwQbJTiugIqw/http%3A%2F%2Fwww.qualityexcellence.es
>
>
>
> El jue, 1 jul 2021 a las 14:51, Carlos Ortega (<cof using qualityexcellence.es
> <mailto:cof using qualityexcellence.es> >) escribió:
>
> Hola,
>
>
>
> Bueno, he comentado que estaría bien hacer eso... pero no lo he hecho...
> :-)...
>
>
>
> Se puede extender el mínimo dataset que nos han compartido, pero lo suyo
> sería trabajar con todo el conjunto si fuese posible, por incluir más
> fármacos y muy importante tener más condiciones.
>
> Todo esto se puede crear de forma sintética para el caso sencillo (las
> mismas condiciones planteadas) pero para incluir más condiciones costaría
> un tanto preparar ese dataset.
>
>
>
> Si  alguien se ofrece para crear el conjunto base... corremos luego varias
> compartivas.
>
>
>
> Gracias,
>
> Carlos Ortega
>
>
> http://secure-web.cisco.com/190P89zEZCZg27zm--Pzdemoj-uaSTLJwnn27fi161HUE-cXUu0gxmnbJK84Jb_ku-3DYJtt0nYjUfXsdh88VdePSLOtQCDzI0IRf2P0Q1dw0G2luzk8x2FbOx4dJ5Dx5_HtngsrqD7P9qY9S9Iv1IrpkL7AYkr_UQbrVjLHQtQ7KC9Z8nxbygLfSTQtxw8S_9Z2jJ_7LFUdX8ew_68GEv5ImC6lxtJGguR_RYMvEED2CxRLWJ1lVSlq1DfuzHgsv62S0-wUkYSMH3UJXsJeC-80lLiShNMN-N4Rw1rEIEvc294fZ8sGQ1zFawzp_Sfn395zK2PnX3xOwQbJTiugIqw/http%3A%2F%2Fwww.qualityexcellence.es
>
>
>
>
>
> El jue, 1 jul 2021 a las 14:37, Isidro Hidalgo Arellano (<ihidalgo using jccm.es
> <mailto:ihidalgo using jccm.es> >) escribió:
>
> Carlos,
> ¿Te importaría poner el código?
> Mil gracias...
>
> Isidro Hidalgo Arellano
> Observatorio del Mercado de Trabajo
> Consejería de Economía, Empresas y Empleo
> http://www.castillalamancha.es/
>
> -----Mensaje original-----
> De: R-help-es <r-help-es-bounces using r-project.org <mailto:
> r-help-es-bounces using r-project.org> > En nombre de
> miguel.angel.rodriguez.muinos using sergas.es <mailto:
> miguel.angel.rodriguez.muinos using sergas.es>
> Enviado el: jueves, 1 de julio de 2021 12:17
> Para: cof using qualityexcellence.es <mailto:cof using qualityexcellence.es>
> CC: r-help-es using r-project.org <mailto:r-help-es using r-project.org>
> Asunto: Re: [R-es] Consulta filtro múltiple.
>
> Buen trabajo, Carlos.
>
>
> Efectivamente, sqldf es muy poco eficiente (porque "recorre" varias veces
> la base adem�de que tiene que traducir las instrucciones).
>
>
> Yo s�lo recomiendo para la gente que viene del mundo SQL (y del grandioso
> SELECT) y/o a los vagos que prefieran escribir poco c�o.
>
> (yo cumplo las dos condiciones)
>
>
> :-)
>
>
> ?
>
> Un saludo,
>
> Miguel.
>
>
>
>
>
> ________________________________
> De: Carlos Ortega <cof using qualityexcellence.es <mailto:
> cof using qualityexcellence.es> >
> Enviado: jueves, 1 de julio de 2021 11:57
> Para: Rodr�ez Mu�s, Miguel �gel
> Cc: juan manuel dias; Lista R
> Asunto: Re: [R-es] Consulta filtro m�le.
>
>  [ ... ]
>
> Y el ganador en tiempos de ejecuci�s...
>
> Unit: microseconds
>       expr       min         lq       mean    median         uq       max
> neval
>  datatable    99.376   198.8520   338.4575   232.609   300.4635  7845.888
> 1000
>      dplyr  1417.242  1939.4520  2598.0892  2285.436  2884.1000 21591.185
> 1000
>       base    62.119    99.7405   158.8749   119.255   156.1890 10826.685
> 1000
>      sqldf 13058.622 16870.2300 21358.6144 19247.554 24269.0985 64807.865
> 1000
>
>  [ ... ]
>
>
>
> Saludos,
> Carlos Ortega
>
> http://secure-web.cisco.com/1sPMcNqTKgaZhCI3VHWDNPt8_Vz5bObsQ2pCpI6mALdCvwyT029ZW-ysfzukZ3rJw_JLfq3tp4HGeCTtarv64mANhWiqtSNw6eWZDkYL3pFw0Mf4Hx_YmTloiiwMhiH4at3c9HBAOyorwxRZbKClEi-JxpDosJjwQcIVT86Wygf27Pw4nI-yF7R0XhLNnfDbt8JrGM6GrqTB2Wtgqx4kVcJhNPmZ43oEzA-vHOyvU_IzV94U3bOinlD3q6bszB9KY-QH0OoIPQE69aJNCUipeKQ/http%3A%2F%2Fwww.qualityexcellence.es
> <
> http://secure-web.cisco.com/1sPMcNqTKgaZhCI3VHWDNPt8_Vz5bObsQ2pCpI6mALdCvwyT029ZW-ysfzukZ3rJw_JLfq3tp4HGeCTtarv64mANhWiqtSNw6eWZDkYL3pFw0Mf4Hx_YmTloiiwMhiH4at3c9HBAOyorwxRZbKClEi-JxpDosJjwQcIVT86Wygf27Pw4nI-yF7R0XhLNnfDbt8JrGM6GrqTB2Wtgqx4kVcJhNPmZ43oEzA-vHOyvU_IzV94U3bOinlD3q6bszB9KY-QH0OoIPQE69aJNCUipeKQ/http%3A%2F%2Fwww.qualityexcellence.es
> >
>
>
>
> ________________________________
>
> Nota: A informaci�ontida nesta mensaxe e os seus posibles documentos
> adxuntos �rivada e confidencial e est�irixida �mente �u destinatario/a. Se
> vostede non �/a destinatario/a orixinal desta mensaxe, por favor elim�a. A
> distribuci�u copia desta mensaxe non est�utorizada.
>
> Nota: La informaci�ontenida en este mensaje y sus posibles documentos
> adjuntos es privada y confidencial y est�irigida �mente a su
> destinatario/a. Si usted no es el/la destinatario/a original de este
> mensaje, por favor elim�lo. La distribuci� copia de este mensaje no
> est�utorizada.
>
> See more languages: http://www.sergas.es/aviso-confidencialidad
>
>         [[alternative HTML version deleted]]
>
>
>
>
>
> --
>
> Saludos,
> Carlos Ortega
>
> http://secure-web.cisco.com/190P89zEZCZg27zm--Pzdemoj-uaSTLJwnn27fi161HUE-cXUu0gxmnbJK84Jb_ku-3DYJtt0nYjUfXsdh88VdePSLOtQCDzI0IRf2P0Q1dw0G2luzk8x2FbOx4dJ5Dx5_HtngsrqD7P9qY9S9Iv1IrpkL7AYkr_UQbrVjLHQtQ7KC9Z8nxbygLfSTQtxw8S_9Z2jJ_7LFUdX8ew_68GEv5ImC6lxtJGguR_RYMvEED2CxRLWJ1lVSlq1DfuzHgsv62S0-wUkYSMH3UJXsJeC-80lLiShNMN-N4Rw1rEIEvc294fZ8sGQ1zFawzp_Sfn395zK2PnX3xOwQbJTiugIqw/http%3A%2F%2Fwww.qualityexcellence.es
>
>
>
> --
>
> Saludos,
> Carlos Ortega
>
> http://secure-web.cisco.com/190P89zEZCZg27zm--Pzdemoj-uaSTLJwnn27fi161HUE-cXUu0gxmnbJK84Jb_ku-3DYJtt0nYjUfXsdh88VdePSLOtQCDzI0IRf2P0Q1dw0G2luzk8x2FbOx4dJ5Dx5_HtngsrqD7P9qY9S9Iv1IrpkL7AYkr_UQbrVjLHQtQ7KC9Z8nxbygLfSTQtxw8S_9Z2jJ_7LFUdX8ew_68GEv5ImC6lxtJGguR_RYMvEED2CxRLWJ1lVSlq1DfuzHgsv62S0-wUkYSMH3UJXsJeC-80lLiShNMN-N4Rw1rEIEvc294fZ8sGQ1zFawzp_Sfn395zK2PnX3xOwQbJTiugIqw/http%3A%2F%2Fwww.qualityexcellence.es
>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20210705/4dddc326/attachment-0001.html>

------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: mono_unid_mayo_2021.csv
Type: application/vnd.ms-excel
Size: 2248 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20210705/4dddc326/attachment-0001.xlb>


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