<div dir="ltr"><div dir="ltr">Hola, como andan!<div><br></div><div>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 </div><div>resolver con un simple inner join de dplyr. </div><div><br></div><div>prueba_2<-base_precios_jun_2021_final %>%<br>  inner_join(mono_unid)<br>view(prueba_2)<br></div><div><br></div><div>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 </div><div>formato longer con las monodrogas y unidades que necesito filtrar.</div><div><br></div><div>Saludos, Juan.</div><div><br></div><div>  </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El vie, 2 jul 2021 a las 4:49, Isidro Hidalgo Arellano (<<a href="mailto:ihidalgo@jccm.es">ihidalgo@jccm.es</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">¡Muchas gracias, Carlos!<br>
<br>
Entonces, los tiempos que pusiste al principio, en los que había grandes diferencias, ¿de dónde salieron?<br>
<br>
¡Muchas gracias, como siempre, por tus grandes aportaciones!<br>
<br>
<br>
<br>
Isidro Hidalgo Arellano<br>
<br>
Observatorio del Mercado de Trabajo<br>
<br>
Consejería de Economía, Empresas y Empleo<br>
<br>
<a href="http://www.castillalamancha.es/" rel="noreferrer" target="_blank">http://www.castillalamancha.es/</a><br>
<br>
<br>
<br>
De: Carlos Ortega <<a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a>> <br>
Enviado el: jueves, 1 de julio de 2021 16:19<br>
Para: Isidro Hidalgo Arellano <<a href="mailto:ihidalgo@jccm.es" target="_blank">ihidalgo@jccm.es</a>><br>
CC: Lista R <<a href="mailto:r-help-es@r-project.org" target="_blank">r-help-es@r-project.org</a>><br>
Asunto: Re: [R-es] Consulta filtro múltiple.<br>
<br>
<br>
<br>
Hola,<br>
<br>
<br>
<br>
Pues al final he terminado haciéndolo... :-)<br>
<br>
<br>
<br>
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.<br>
<br>
<br>
<br>
Con este código, puedo seleccionar el número de nombres (medicamentos) a buscar y automáticamente también selecciona los valores.<br>
<br>
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).<br>
<br>
<br>
<br>
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.<br>
<br>
<br>
<br>
#-------------<br>
<br>
<br>
library(babynames)<br>
library(dplyr)<br>
library(data.table)<br>
library(tictoc)<br>
library(microbenchmark)<br>
<br>
midt <- setDT(copy(babynames))<br>
midf <- as.data.table(midt)<br>
<br>
#--- Ejemplo de condiciones que se buscan<br>
# Elizabeth == 8915<br>
# Michael == 88514<br>
# David == 86251<br>
<br>
# Selecciono nombres y su frecuencia (primera aparición) aleatoriamente<br>
NUM_NOMBRES <- 1000<br>
all_nam <- unique(midt[ , .(name)])<br>
rnd_idx <- sample(1:nrow(all_nam), NUM_NOMBRES, replace = FALSE)<br>
mi_names <- all_nam[ rnd_idx, .(name)]<br>
mi_value <- midt[ name %chin% mi_names$name, .(n), by = name] %>% <br>
                 .[ , .SD[1], by = name]<br>
<br>
#--- Crear condiciones automáticamente<br>
#-- cond_end == Condiciones para data.table y dplyr<br>
#-- cond_bas == Condiciones para base<br>
NUM_CONDICIONES <- 50<br>
cond_end <- vector() <br>
cond_bas <- vector()<br>
for (i in 1:NUM_CONDICIONES) {<br>
  name_val <- mi_value$name[i]<br>
  n_val    <- mi_value$n[i]<br>
  if (i < num_cond) {<br>
      mi_cond  <- paste("( name == '" , name_val, "' & n == ", n_val, " ) | ", sep = "")<br>
      mi_cond2 <- paste("( midf$name == '" , name_val, "' & midf$n == ", n_val, " ) | ", sep = "")<br>
  } else {<br>
      mi_cond  <- paste(" ( name == '" , name_val, "' & n == ", n_val, " )", sep = "")<br>
      mi_cond2 <- paste(" ( midf$name == '" , name_val, "' & midf$n == ", n_val, " )", sep = "")<br>
  }<br>
  cond_end <- paste0(cond_end, mi_cond, collapse = "\n")<br>
  cond_bas <- paste0(cond_bas, mi_cond2, collapse = "\n")<br>
}<br>
<br>
#------- COMPARACIONES ---------------<br>
#-- data.table<br>
tic()<br>
midt[ eval(parse(text = cond_end )), ]<br>
toc()<br>
<br>
#-- dplyr<br>
midf <- as.data.frame(midt)<br>
tic()<br>
midf %>%<br>
  filter( eval(parse(text = cond_end )), )<br>
toc()<br>
<br>
#--- base<br>
tic()<br>
midf[ eval(parse(text = cond_bas )), ]<br>
toc()<br>
<br>
<br>
#------- BENCHMARKINGS --------------<br>
microbenchmark(<br>
  data.table = midt[ eval(parse(text = cond_end )), ] ,<br>
  base       = midf[ eval(parse(text = cond_bas )), ] ,<br>
  dplyr      = midf %>% filter( eval(parse(text = cond_end )), ) ,<br>
  times = 25 <br>
)<br>
<br>
<br>
<br>
#------------<br>
<br>
<br>
<br>
Los tiempos que he obtenido para 50 condiciones lógicas, evaluados 25 veces...<br>
<br>
<br>
<br>
Unit: seconds<br>
       expr      min       lq     mean   median       uq      max neval<br>
 data.table 1.481466 1.543330 1.622688 1.598947 1.679465 1.866847    25<br>
       base 1.518659 1.560412 1.621398 1.592776 1.641903 1.798532    25<br>
      dplyr 1.505253 1.530137 1.571444 1.554524 1.597147 1.714049    25<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
Gracias,<br>
<br>
Carlos Ortega<br>
<br>
<a href="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" rel="noreferrer" target="_blank">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</a><br>
<br>
<br>
<br>
El jue, 1 jul 2021 a las 14:51, Carlos Ortega (<<a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a> <mailto:<a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a>> >) escribió:<br>
<br>
Hola,<br>
<br>
<br>
<br>
Bueno, he comentado que estaría bien hacer eso... pero no lo he hecho... :-)...<br>
<br>
<br>
<br>
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.<br>
<br>
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.<br>
<br>
<br>
<br>
Si  alguien se ofrece para crear el conjunto base... corremos luego varias compartivas.<br>
<br>
<br>
<br>
Gracias,<br>
<br>
Carlos Ortega<br>
<br>
<a href="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" rel="noreferrer" target="_blank">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</a><br>
<br>
<br>
<br>
<br>
<br>
El jue, 1 jul 2021 a las 14:37, Isidro Hidalgo Arellano (<<a href="mailto:ihidalgo@jccm.es" target="_blank">ihidalgo@jccm.es</a> <mailto:<a href="mailto:ihidalgo@jccm.es" target="_blank">ihidalgo@jccm.es</a>> >) escribió:<br>
<br>
Carlos,<br>
¿Te importaría poner el código?<br>
Mil gracias...<br>
<br>
Isidro Hidalgo Arellano<br>
Observatorio del Mercado de Trabajo<br>
Consejería de Economía, Empresas y Empleo<br>
<a href="http://www.castillalamancha.es/" rel="noreferrer" target="_blank">http://www.castillalamancha.es/</a><br>
<br>
-----Mensaje original-----<br>
De: R-help-es <<a href="mailto:r-help-es-bounces@r-project.org" target="_blank">r-help-es-bounces@r-project.org</a> <mailto:<a href="mailto:r-help-es-bounces@r-project.org" target="_blank">r-help-es-bounces@r-project.org</a>> > En nombre de <a href="mailto:miguel.angel.rodriguez.muinos@sergas.es" target="_blank">miguel.angel.rodriguez.muinos@sergas.es</a> <mailto:<a href="mailto:miguel.angel.rodriguez.muinos@sergas.es" target="_blank">miguel.angel.rodriguez.muinos@sergas.es</a>> <br>
Enviado el: jueves, 1 de julio de 2021 12:17<br>
Para: <a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a> <mailto:<a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a>> <br>
CC: <a href="mailto:r-help-es@r-project.org" target="_blank">r-help-es@r-project.org</a> <mailto:<a href="mailto:r-help-es@r-project.org" target="_blank">r-help-es@r-project.org</a>> <br>
Asunto: Re: [R-es] Consulta filtro múltiple.<br>
<br>
Buen trabajo, Carlos.<br>
<br>
<br>
Efectivamente, sqldf es muy poco eficiente (porque "recorre" varias veces la base adem�de que tiene que traducir las instrucciones).<br>
<br>
<br>
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.<br>
<br>
(yo cumplo las dos condiciones)<br>
<br>
<br>
:-)<br>
<br>
<br>
?<br>
<br>
Un saludo,<br>
<br>
Miguel.<br>
<br>
<br>
<br>
<br>
<br>
________________________________<br>
De: Carlos Ortega <<a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a> <mailto:<a href="mailto:cof@qualityexcellence.es" target="_blank">cof@qualityexcellence.es</a>> ><br>
Enviado: jueves, 1 de julio de 2021 11:57<br>
Para: Rodr�ez Mu�s, Miguel �gel<br>
Cc: juan manuel dias; Lista R<br>
Asunto: Re: [R-es] Consulta filtro m�le.<br>
<br>
 [ ... ]<br>
<br>
Y el ganador en tiempos de ejecuci�s...<br>
<br>
Unit: microseconds<br>
      expr       min         lq       mean    median         uq       max neval<br>
 datatable    99.376   198.8520   338.4575   232.609   300.4635  7845.888  1000<br>
     dplyr  1417.242  1939.4520  2598.0892  2285.436  2884.1000 21591.185  1000<br>
      base    62.119    99.7405   158.8749   119.255   156.1890 10826.685  1000<br>
     sqldf 13058.622 16870.2300 21358.6144 19247.554 24269.0985 64807.865  1000<br>
<br>
 [ ... ]<br>
<br>
<br>
<br>
Saludos,<br>
Carlos Ortega<br>
<a href="http://secure-web.cisco.com/1sPMcNqTKgaZhCI3VHWDNPt8_Vz5bObsQ2pCpI6mALdCvwyT029ZW-ysfzukZ3rJw_JLfq3tp4HGeCTtarv64mANhWiqtSNw6eWZDkYL3pFw0Mf4Hx_YmTloiiwMhiH4at3c9HBAOyorwxRZbKClEi-JxpDosJjwQcIVT86Wygf27Pw4nI-yF7R0XhLNnfDbt8JrGM6GrqTB2Wtgqx4kVcJhNPmZ43oEzA-vHOyvU_IzV94U3bOinlD3q6bszB9KY-QH0OoIPQE69aJNCUipeKQ/http%3A%2F%2Fwww.qualityexcellence.es" rel="noreferrer" target="_blank">http://secure-web.cisco.com/1sPMcNqTKgaZhCI3VHWDNPt8_Vz5bObsQ2pCpI6mALdCvwyT029ZW-ysfzukZ3rJw_JLfq3tp4HGeCTtarv64mANhWiqtSNw6eWZDkYL3pFw0Mf4Hx_YmTloiiwMhiH4at3c9HBAOyorwxRZbKClEi-JxpDosJjwQcIVT86Wygf27Pw4nI-yF7R0XhLNnfDbt8JrGM6GrqTB2Wtgqx4kVcJhNPmZ43oEzA-vHOyvU_IzV94U3bOinlD3q6bszB9KY-QH0OoIPQE69aJNCUipeKQ/http%3A%2F%2Fwww.qualityexcellence.es</a><<a href="http://secure-web.cisco.com/1sPMcNqTKgaZhCI3VHWDNPt8_Vz5bObsQ2pCpI6mALdCvwyT029ZW-ysfzukZ3rJw_JLfq3tp4HGeCTtarv64mANhWiqtSNw6eWZDkYL3pFw0Mf4Hx_YmTloiiwMhiH4at3c9HBAOyorwxRZbKClEi-JxpDosJjwQcIVT86Wygf27Pw4nI-yF7R0XhLNnfDbt8JrGM6GrqTB2Wtgqx4kVcJhNPmZ43oEzA-vHOyvU_IzV94U3bOinlD3q6bszB9KY-QH0OoIPQE69aJNCUipeKQ/http%3A%2F%2Fwww.qualityexcellence.es" rel="noreferrer" target="_blank">http://secure-web.cisco.com/1sPMcNqTKgaZhCI3VHWDNPt8_Vz5bObsQ2pCpI6mALdCvwyT029ZW-ysfzukZ3rJw_JLfq3tp4HGeCTtarv64mANhWiqtSNw6eWZDkYL3pFw0Mf4Hx_YmTloiiwMhiH4at3c9HBAOyorwxRZbKClEi-JxpDosJjwQcIVT86Wygf27Pw4nI-yF7R0XhLNnfDbt8JrGM6GrqTB2Wtgqx4kVcJhNPmZ43oEzA-vHOyvU_IzV94U3bOinlD3q6bszB9KY-QH0OoIPQE69aJNCUipeKQ/http%3A%2F%2Fwww.qualityexcellence.es</a>><br>
<br>
<br>
<br>
________________________________<br>
<br>
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.<br>
<br>
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.<br>
<br>
See more languages: <a href="http://www.sergas.es/aviso-confidencialidad" rel="noreferrer" target="_blank">http://www.sergas.es/aviso-confidencialidad</a><br>
<br>
        [[alternative HTML version deleted]]<br>
<br>
<br>
<br>
<br>
<br>
-- <br>
<br>
Saludos,<br>
Carlos Ortega<br>
<a href="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" rel="noreferrer" target="_blank">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</a><br>
<br>
<br>
<br>
-- <br>
<br>
Saludos,<br>
Carlos Ortega<br>
<a href="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" rel="noreferrer" target="_blank">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</a><br>
<br>
<br>
        [[alternative HTML version deleted]]<br>
<br>
_______________________________________________<br>
R-help-es mailing list<br>
<a href="mailto:R-help-es@r-project.org" target="_blank">R-help-es@r-project.org</a><br>
<a href="https://stat.ethz.ch/mailman/listinfo/r-help-es" rel="noreferrer" target="_blank">https://stat.ethz.ch/mailman/listinfo/r-help-es</a><br>
</blockquote></div></div>