[R] Get data from a list of data frames

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Thu Dec 15 18:31:51 CET 2022


Well, just for giggles, Gerrit's solution can be easily vectorized (i.e. no
apply()-type stuff needed) IFF the structure of all the data frames are
identical so that rbind() works:

d <-do.call('rbind',Total[select.stat]) ## one data frame to combine them
all ;-)
d[d$sensor == 'thermometer','code']

Whether this is better, worse, or unneeded, I cannot say.

Cheers,
Bert


On Thu, Dec 15, 2022 at 6:11 AM Gerrit Eichner <
gerrit.eichner using math.uni-giessen.de> wrote:

> Hello, Stefano,
>
> maybe the following example contains what you want to achieve:
>
> Station1 <- data.frame(sensor = c("thermometer", "raingauge",
> "snowgauge", "anemometer"),
>                         code = c(2583, 1478, 3178, NA))
> Station2 <- data.frame(sensor = c("thermometer", "raingauge",
> "snowgauge", "anemometer"),
>                         code = c(2584, 1479, 3179, 4453))
> Station3 <- data.frame(sensor = c("thermometer", "raingauge",
> "snowgauge", "anemometer"),
>                         code = c(2584, 1479, 3179, 4453))
> Station4 <- data.frame(sensor = rev(c("thermometer", "raingauge",
> "snowgauge", "anemometer")),
>                         code = c(2584, 1479, 3179, 4453))
> Station5 <- data.frame(sensor = c("raingauge", "snowgauge",
> "thermometer", "anemometer"),
>                         code = c(2584, 1479, 3179, 4453))
>
> Total <- list("Station1"=Station1, "Station2"=Station2,
>                Station3 = Station3, Station4 = Station4,
>                Station5 = Station5)
>
> select.stat <- paste0("Station", c(1, 4, 5))
> select.sens <- "thermometer"
>
> sapply(Total[select.stat], function(x, sens)
>    x$code[x$sensor == sens], sens = select.sens)
>
>
>
>   Hth --  Gerrit
>
> ---------------------------------------------------------------------
> Dr. Gerrit Eichner                   Mathematical Institute, Room 212
> gerrit.eichner using math.uni-giessen.de   Justus-Liebig-University Giessen
> Tel: +49-(0)641-99-32104          Arndtstr. 2, 35392 Giessen, Germany
> http://www.uni-giessen.de/eichner
> ---------------------------------------------------------------------
>
> Am 15.12.2022 um 14:52 schrieb Stefano Sofia:
> > Dear R-list users,
> >
> > I have a list of n data frames built as follows:
> >
> >
> > Station1 <- data.frame(sensor = c("thermometer", "raingauge",
> "snowgauge", "anemometer"), code = c(2583, 1478, 3178, NA))
> > Station2 <- data.frame(sensor = c("thermometer", "raingauge",
> "snowgauge", "anemometer"), code = c(2584, 1479, 3179, 4453))
> > ....
> >
> > Total <- list("Station1"=Station1, "Station2"=Station2, ...)
> >
> > I would need to have a vector with the sensor codes of the thermometers
> of some stations, let's say of Station1, Station2 and Station5 (i.e.
> c(2583, 2584, 2587)).
> > I tried with lapply, but I have not been able to get what I need.
> > Could you please help me?
> >
> > Thank you
> >
> > Stefano
> >
> >
> >
> >           (oo)
> > --oOO--( )--OOo--------------------------------------
> > Stefano Sofia PhD
> > Civil Protection - Marche Region - Italy
> > Meteo Section
> > Snow Section
> > Via del Colle Ameno 5
> > 60126 Torrette di Ancona, Ancona (AN)
> > Uff: +39 071 806 7743
> > E-mail: stefano.sofia using regione.marche.it
> > ---Oo---------oO----------------------------------------
> >
> > ________________________________
> >
> > AVVISO IMPORTANTE: Questo messaggio di posta elettronica pu� contenere
> informazioni confidenziali, pertanto � destinato solo a persone autorizzate
> alla ricezione. I messaggi di posta elettronica per i client di Regione
> Marche possono contenere informazioni confidenziali e con privilegi legali.
> Se non si � il destinatario specificato, non leggere, copiare, inoltrare o
> archiviare questo messaggio. Se si � ricevuto questo messaggio per errore,
> inoltrarlo al mittente ed eliminarlo completamente dal sistema del proprio
> computer. Ai sensi dell'art. 6 della DGR n. 1394/2008 si segnala che, in
> caso di necessit� ed urgenza, la risposta al presente messaggio di posta
> elettronica pu� essere visionata da persone estranee al destinatario.
> > IMPORTANT NOTICE: This e-mail message is intended to be received only by
> persons entitled to receive the confidential information it may contain.
> E-mail messages to clients of Regione Marche may contain information that
> is confidential and legally privileged. Please do not read, copy, forward,
> or store this message unless you are an intended recipient of it. If you
> have received this message in error, please forward it to the sender and
> delete it completely from your computer system.
> >
> > --
> >
> > Questo messaggio  stato analizzato da Libraesva ESG ed  risultato non
> infetto.
> >
> > This message was scanned by Libraesva ESG and is believed to be clean.
> >
> >
> >       [[alternative HTML version deleted]]
> >
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list