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 (<ihida...@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 <c...@qualityexcellence.es> > Enviado el: jueves, 1 de julio de 2021 16:19 > Para: Isidro Hidalgo Arellano <ihida...@jccm.es> > CC: Lista R <r-help-es@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 (<c...@qualityexcellence.es > <mailto:c...@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 (<ihida...@jccm.es > <mailto:ihida...@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-boun...@r-project.org <mailto: > r-help-es-boun...@r-project.org> > En nombre de > miguel.angel.rodriguez.mui...@sergas.es <mailto: > miguel.angel.rodriguez.mui...@sergas.es> > Enviado el: jueves, 1 de julio de 2021 12:17 > Para: c...@qualityexcellence.es <mailto:c...@qualityexcellence.es> > CC: r-help-es@r-project.org <mailto:r-help-es@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 <c...@qualityexcellence.es <mailto: > c...@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >
mono_unid_mayo_2021.csv
Description: MS-Excel spreadsheet
_______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es