Hi again, Didn't realize that the example didn't even span a full day. ssdf<-read.table(text="date_POSIX time_POSIX vmax 2018-02-01 00:00:00 27 2018-02-01 00:10:00 41 2018-02-01 00:20:00 46 2018-02-01 00:30:00 39 2018-02-01 00:40:00 34 2018-02-01 00:50:00 32 2018-02-01 01:00:00 37 2018-02-01 01:10:00 31 2018-02-01 01:20:00 26 2018-02-01 01:30:00 29 2018-02-01 01:40:00 24 2018-02-01 01:50:00 35", header=TRUE,stringsAsFactors=FALSE) # extract the hour ssdf$hour<- as.numeric(unlist(lapply(strsplit(ssdf$time_POSIX,":"),"[",1))) # get the time of day as seconds from the time field ssdf$mins<- as.numeric(unlist(lapply(strsplit(ssdf$time_POSIX,":"),"[",2))) # create an AM/PM variable ssdf$ampm<-ifelse(ssdf$mins > 0 & ssdf$mins <= 30,"am","pm") # drop first row ssdf<-ssdf[-1,] means<-aggregate(vmax~hour+ampm,ssdf,mean)
This does a full day. To do more, add the date_POSIX field to the aggregate command. If you have the date and time in one field you'll have to split that. That will distinguish the AM/PM means in each day as well as hour. Jim On Thu, Dec 3, 2020 at 2:10 PM Jim Lemon <drjimle...@gmail.com> wrote: > > Hi Stefano, > I read in your date-time as two separate fields for convenience. You > can split your single field at the space to get the same result. > > ssdf<-read.table(text="date_POSIX time_POSIX vmax > 2018-02-01 00:00:00 27 > 2018-02-01 00:10:00 41 > 2018-02-01 00:20:00 46 > 2018-02-01 00:30:00 39 > 2018-02-01 00:40:00 34 > 2018-02-01 00:50:00 32", > header=TRUE,stringsAsFactors=FALSE) > # get the time of day as seconds from the time field > ssdf$seconds<-as.numeric(strptime(ssdf$time_POSIX,"%H:%M:%S")) > # subtract whatever current date strptime guesses for the date > ssdf$seconds<-ssdf$seconds-min(ssdf$seconds) > # create an AM/PM variable > ssdf$ampm<-ifelse(ssdf$seconds > 0 & ssdf$seconds <= 1800,"am","pm") > means<-aggregate(vmax~ampm,ssdf,mean) > > Jim > > On Thu, Dec 3, 2020 at 4:55 AM Stefano Sofia > <stefano.so...@regione.marche.it> wrote: > > > > Dear list users, > > I have wind data with frequency of 10 minutes (three years data). For > > simplicity let me use only max wind speed. > > I need to reduce the frequency to 30 minutes, at 00 (taking the mean of > > data at 40, 50 and 00 minutes) and at 30 (taking the mean of data at 10, 20 > > and 30 minutes) of each hour. > > > > The simple code here reported works well, but the column "interval" groups > > data forward, not backward: > > > > init_day <- as.POSIXct("2018-02-01-00-00", format="%Y-%m-%d-%H-%M", > > tz="Etc/GMT-1") > > fin_day <- as.POSIXct("2018-02-01-02-00", format="%Y-%m-%d-%H-%M", > > tz="Etc/GMT-1") > > mydf <- data.frame(data_POSIX=seq(init_day, fin_day, by="10 mins")) > > mydf$vmax <- round(rnorm(13, 35, 10)) > > mydf$interval <- cut(mydf$data_POSIX, , breaks="30 min") > > means <- aggregate(vmax ~ interval, mydf, mean) > > > > data_POSIX vmax interval > > 1 2018-02-01 00:00:00 27 2018-02-01 00:00:00 > > 2 2018-02-01 00:10:00 41 2018-02-01 00:00:00 > > 3 2018-02-01 00:20:00 46 2018-02-01 00:00:00 > > 4 2018-02-01 00:30:00 39 2018-02-01 00:30:00 > > 5 2018-02-01 00:40:00 34 2018-02-01 00:30:00 > > 6 2018-02-01 00:50:00 32 2018-02-01 00:30:00 > > ... > > > > I should work with > > > > data_POSIX vmax interval > > 1 2018-02-01 00:00:00 27 2018-02-01 00:00:00 > > 2 2018-02-01 00:10:00 41 2018-02-01 00:30:00 > > 3 2018-02-01 00:20:00 46 2018-02-01 00:30:00 > > 4 2018-02-01 00:30:00 39 2018-02-01 00:30:00 > > 5 2018-02-01 00:40:00 34 2018-02-01 00:00:00 > > 6 2018-02-01 00:50:00 32 2018-02-01 00:00:00 > > ... > > > > > > Is there a way to modify this code to groupp data correctly? (I would > > prefer using only the base package) > > > > Thank you for your help > > Stefano > > > > > > > > (oo) > > --oOO--( )--OOo---------------- > > Stefano Sofia PhD > > Civil Protection - Marche Region > > Meteo Section > > Snow Section > > 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.