Otra opción es combinar case_when y filter con dplyr. Con case_when creas
una variable dummy y luego filtras por esta:
data %>%
mutate(
dummy = case_when(
Monodroga == aciclovir & unidades >= 20 ~ TRUE,
Monodroga == paracetamol & unidades >= 10 ~ TRUE,
Monodroga == rosuvastina & unidades >= 30 ~ TRUE,
TRUE ~ FALSE
)
) %>%
filter(isTRUE(dummy))
*Víctor Granda García*
Data Scientist
Ecosystem Modelling Facility - CREAF
Tel. +34 93 581 33 53
CREAF. Campus UAB. Edifici C. 08193 Bellaterra (Barcelona)
Antes de imprimir este mensaje electrónico piense en el medio ambiente.
On Thu, 1 Jul 2021 at 06:53, juan manuel dias <juamadias en gmail.com>
wrote:
> Muchas gracias! Lo veo una buena opción, mañana voy a probar con algunas
> monodrogas para ver que funcione y en tal caso lo escalo a toda la base.
> Muchas gracias! Juan.
>
> El mié., 30 de jun. de 2021 7:35 p.m., Eric Concha M. <
> ericconchamunoz en gmail.com> escribió:
>
> >
> > Y si lo haces con la libreria data.table ? suponiendo que bd es tu
> > base de datos:
> >
> > bd1 <- bd[monodroga=="aciclovir" & UNIDADES==20,]
> > bd2 <- bd[monodroga=="paracetamol" & UNIDADES==10,]
> > bd3 <- bd[monodroga=="rosuvastatina" &
UNIDADES==30,]
> >
> > y luego las unes:
> >
> > bd.nueva <- rbind(bd1,bd2,bd3)
> >
> > Algo así podría ser ... hay muchas otras formas de hacerlo, pero me
> > gusta data.table cuando son bbdd grandes xq es muy rápida, sobretodo
si
> > la usas con set.key() ... mira la ayuda de R para que veas los
detalles
> > de data.table.
> >
> > Ojo con los detalles, como que la columna monodroga sea tipo caracter
o
> > factor, q UNIDADES sea numérico, y así ...
> >
> > Suerte !!
> >
> > Eric.
> >
> >
> >
> >
> > n Wed, 30 Jun 2021 19:15:21 -0300
> > juan manuel dias <juamadias en gmail.com> wrote:
> >
> > > Hola, como andan!
> > >
> > > Tengo una base de datos de medicamentos (monodrogas), con tres
> > > variables, unidades, precio y precio unitario. Necesito llegar a
un
> > > data frame donde tenga solo las monodrogas que cumplen alguna
> > > condición en la variable unidades, pero considerando varias
> > > monodrogas.
> > >
> > > Esto es un recorte de la base:
> > >
> > > Monodroga UNIDADES Precio PrecioUnit
> > > aciclovir 20 111272 55.636
> > > aciclovir 20 97464 48.732
> > > aciclovir 40 98322 432
> > > aciclovir 40 98322 324
> > > paracetamol 1 19291 192.91
> > > paracetamol 1 24702 247.02
> > > paracetamol 1 21120 211.2
> > > paracetamol 10 9993 9.993
> > > paracetamol 10 10443 10.443
> > > rosuvastatina 14 141134 100.81
> > > rosuvastatina 28 258262 92.2364286
> > > rosuvastatina 28 201590 71.9964286
> > > rosuvastatina 30 183717 61.239
> > > rosuvastatina 30 231935 77.3116667
> > >
> > > Por ejemplo, para la monodroga "aciclovir" necesito
solo las filas
> > > donde Unidades==20, en paracetamol==10 y en rosuvastatina==30.
> > >
> > > Estoy trabajando con tidyverse y he probado algunas cosas que no
han
> > > funcionado.
> > >
> > >
prom_max_min_base_precios_May_2021_final<-base_precios_May_2021_final
> > > %>%
##unite("concat1",CodDrog,CodForma,sep="",remove = FALSE)
%>%
> > >
##unite("concat2",CodDrog,CodForma,Potencia,sep="",remove =
FALSE)
> > > %>% filter(!is.na(CodDrog)) %>%
> > > ##filter(monodroga=="aciclovir", Unidades %in% c(20))
%>%
> > > group_by(concat1,concat2,monodroga) %>%
> > > summarize(min_may_2021=min(precio_unitario),
> > > max_may_2021=max(precio_unitario),
> > > prom_may_2021=mean(precio_unitario)) %>%
> > > ungroup()
> > >
> > > Ajdunto la base en csv.
> > >
> > > Muchas gracias!
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es en r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
>
> [[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
>
[[alternative HTML version deleted]]