Hmm, almost but my real data frame is much larger (128 columns). The problem is with this line newData <- do.call(rbind, tapply(x[4:8], x$interval, colMeans))
when I do tapply(x[4:8], x$interval, colMeans) all works but when I do tapply(x[4:7], x$interval, colMeans) I get Error in tapply(x[4:7], x$interval, colMeans) : arguments must have same length and x[2:126] gets the same error... Not sure why it only works with the 4 columns? Any thoughts? Thanks for your help Jim. M On 12/19/2011 2:00 PM, jim holtman wrote: > Does this work for you: > >> x<- read.table(text = " date time Voltage LwTempDownelling LwDownwelling >> LwDownwelling_min LwDownwelling_max LwTempUpwelling > + 1 2011-11-01 00:00:00 2.732447 17.30 30.0 > 14.0 39.5 17.83 > + 2 2011-11-01 00:10:00 2.731534 17.46 15.3 > 11.1 24.6 17.95 > + 3 2011-11-01 00:20:00 2.731368 17.43 28.7 > 24.6 30.7 17.93 > + 4 2011-11-01 00:30:00 2.730703 17.36 40.4 > 29.8 43.5 17.86 > + 5 2011-11-01 00:40:00 2.729567 17.26 41.6 > 40.5 42.6 17.76" > + , header = TRUE > + ) >> # convert the time >> x$timestamp<- as.POSIXct(paste(x$date, x$time)) >> # calculate the start of time ranges >> start<- trunc(min(x$timestamp), units = 'hour') >> # create breakpoints at 30 minutes >> breaks<- seq(from = start > + , to = max(x$timestamp) + 3600 # make sure you have the > last range > + , by = '30 min' > + ) >> # slice up the data by adding index >> x$interval<- findInterval(x$timestamp, breaks) >> >> # determine colMeans >> newData<- do.call(rbind, tapply(x[4:8], x$interval, colMeans)) >> newData<- as.data.frame(newData) >> >> # add the time back >> newData$timestamp<- breaks[as.integer(rownames(newData))] >> newData > LwTempDownelling LwDownwelling LwDownwelling_min LwDownwelling_max > LwTempUpwelling > 1 17.39667 24.66667 16.56667 31.60 > 17.90333 > 2 17.31000 41.00000 35.15000 43.05 > 17.81000 > timestamp > 1 2011-11-01 00:00:00 > 2 2011-11-01 00:30:00 >> > > On Mon, Dec 19, 2011 at 4:28 AM, Mathew Brown > <mathew.br...@forst.uni-goettingen.de> wrote: >> >> Hi there, >> >> This seems like it should be simple. I have a data frame of climate data >> sampled every 10 min. I want to average the entire data frame into 30 >> min values (i.e., one value for each half hour). Functions like >> running.mean give me a moving average but I want to reduce the size of >> the entire frame.. Any ideas how? Cheers! >> >> Example of my data >> >> timestamp Voltage LwTempDownelling LwDownwelling LwDownwelling_min >> LwDownwelling_max LwTempUpwelling >> 1 2011-11-01 00:00:00 2.732447 17.30 30.0 >> 14.0 39.5 17.83 >> 2 2011-11-01 00:10:00 2.731534 17.46 15.3 >> 11.1 24.6 17.95 >> 3 2011-11-01 00:20:00 2.731368 17.43 28.7 >> 24.6 30.7 17.93 >> 4 2011-11-01 00:30:00 2.730703 17.36 40.4 >> 29.8 43.5 17.86 >> 5 2011-11-01 00:40:00 2.729567 17.26 41.6 >> 40.5 42.6 17.76 >> 6 2011-11-01 00:50:00 2.728976 17.16 39.7 >> >> >> -M.B >> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list >> 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]] ______________________________________________ R-help@r-project.org mailing list 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.