Hi Stefano, This was such a stinker of a problem that I just had to crack it:
# create some data the lazy man's way year_dates<-c(paste(2000,rep("01",31),formatC(1:31,width=2,flag=0),sep="-"), paste(2000,rep("02",29),formatC(1:29,width=2,flag=0),sep="-"), paste(2000,rep("03",31),formatC(1:31,width=2,flag=0),sep="-"), paste(2000,rep("04",30),formatC(1:30,width=2,flag=0),sep="-"), paste(2000,rep("05",31),formatC(1:31,width=2,flag=0),sep="-"), paste(2000,rep("06",30),formatC(1:30,width=2,flag=0),sep="-"), paste(2000,rep("07",31),formatC(1:31,width=2,flag=0),sep="-"), paste(2000,rep("08",31),formatC(1:31,width=2,flag=0),sep="-"), paste(2000,rep("09",30),formatC(1:30,width=2,flag=0),sep="-"), paste(2000,rep("10",31),formatC(1:31,width=2,flag=0),sep="-"), paste(2000,rep("11",30),formatC(1:30,width=2,flag=0),sep="-"), paste(2000,rep("12",31),formatC(1:31,width=2,flag=0),sep="-")) df1<-data.frame(station_code=rep(217,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df2<-data.frame(station_code=rep(218,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df3<-data.frame(station_code=rep(219,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df4<-data.frame(station_code=rep(220,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df5<-data.frame(station_code=rep(221,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df6<-data.frame(station_code=rep(222,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df7<-data.frame(station_code=rep(223,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df8<-data.frame(station_code=rep(224,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df9<-data.frame(station_code=rep(225,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) df10<-data.frame(station_code=rep(226,366), date_factor=year_dates,date_POSIX=year_dates, snow=c(sample(0:70,31),sample(0:50,29),sample(0:10,31,TRUE),rep(0,214), sample(0:20,30,TRUE),sample(0:60,31))) snow_list<-list(df1,df2,df3,df4,df5,df6,df7,df8,df9,df10) for(station in 1:10) snow_list[[station]]$doy<-1:length(snow_list[[station]]$date_POSIX) select_days<-c(1:12,83:88) cum_snow<-function(x,which_days) { return(list(x$station_code[1],sum(x$snow[which_days]))) } cum_list<-lapply(lapply(snow_list,cum_snow,select_days),unlist) snow_totals<-data.frame(station_code=NULL,snow_cumulate=NULL) for(station in 1:10) snow_totals<-rbind(snow_totals,cum_list[[station]]) names(snow_totals)<-c("station_code","snow_cumulate") Jim On Sat, Aug 11, 2018 at 2:48 AM, Stefano Sofia <stefano.so...@regione.marche.it> wrote: > Dear R-list users, > I have 10 data frames (called df1, df2, ... df10), where each of them > contains snow data from an automatic meteorological station (obviously each > station has a different station code). > Here is an example of df1: > > station_code date_factor date_POSIX snow > 217 1999-12-15 1999-12-15 0 > 217 1999-12-16 1999-12-16 0 > 217 1999-12-17 1999-12-17 38 > 217 1999-12-18 1999-12-18 31 > 217 1999-12-19 1999-12-19 21 > 217 1999-12-20 1999-12-20 12 > 217 1999-12-21 1999-12-21 42 > 217 1999-12-22 1999-12-22 61 > 217 1999-12-23 1999-12-23 57 > 217 1999-12-24 1999-12-24 48 > ... > > where >> sapply(df1, class) > $station_code > [1] "numeric" > > $date_factor > [1] "factor" > > $date_POSIX > [1] "POSIXct" "POSIXt" > > $snow > [1] "integer" > > Given a series of max three intervals (example with two intervals: from 1st > to 12th of January 2000 and from 23rd to 28th of March 2000), I need to > evaluate for each station the total snow cumulate for all the intervals > selected, and finally create a data frame where for each line there is the > station code and the snow cumulate. It should be like > > station_code total_snow_cumulate > 217 125 > 218 80 > ... > > Could somebody show me a direction for an efficient solution? > > Thank you for your attention and your help > Stefano > > > (oo) > --oOO--( )--OOo---------------- > Stefano Sofia PhD > Area Meteorologica e Area nivologica - Centro Funzionale > Servizio Protezione Civile - Regione Marche > Via del Colle Ameno 5 > 60126 Torrette di Ancona, Ancona > Uff: 071 806 7743 > E-mail: stefano.so...@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 Libra ESVA ed risultato non infetto. > This message was scanned by Libra ESVA and is believed to be clean. > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@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@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.