Hey R-Help, I've got a three dimensional array which I pulled from a netcdf file. The data in array are the humidity values of locations in the United States over a time period. The three dimensions are [longitude, latitude, days], 141x81x92. My goal is to find the mean value at each longitude/latitude over the 92 day period. I could probably accomplish my goal by running a loop, but I'm sure that there is a much easier and more efficient way to accomplish the goal in R. Any suggestions? Thanks guys.
> On 15 Jun 2016, at 19:37 , Nick Tulli <nick.tulli.95 at gmail.com> wrote: > > Hey R-Help, > > I've got a three dimensional array which I pulled from a netcdf file. > The data in array are the humidity values of locations in the United > States over a time period. The three dimensions are [longitude, > latitude, days], 141x81x92. My goal is to find the mean value at each > longitude/latitude over the 92 day period. > > I could probably accomplish my goal by running a loop, but I'm sure > that there is a much easier and more efficient way to accomplish the > goal in R. Any suggestions?Dunno about fast, but the canonical way is apply(A, c(1,2), mean) E.g. (A <- array(1:24,c(2,3,4))) apply(A, c(1,2), mean) apply(A, c(1,3), mean) -pd> > > Thanks guys. > > ______________________________________________ > R-help at 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.-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
On 06/15/2016 09:05 PM, peter dalgaard wrote: > >> On 15 Jun 2016, at 19:37 , Nick Tulli <nick.tulli.95 at gmail.com> wrote: >> >> Hey R-Help, >> >> I've got a three dimensional array which I pulled from a netcdf file. >> The data in array are the humidity values of locations in the United >> States over a time period. The three dimensions are [longitude, >> latitude, days], 141x81x92. My goal is to find the mean value at each >> longitude/latitude over the 92 day period. >> >> I could probably accomplish my goal by running a loop, but I'm sure >> that there is a much easier and more efficient way to accomplish the >> goal in R. Any suggestions? > > Dunno about fast, but the canonical way is apply(A, c(1,2), mean) For "mean" and "sum", row/colMeans() is pretty fast and efficient. Note the 'dims' argument; you might also consider the aperm() function before the aggregation. E.g.: # create an array x <- provideDimnames(array(rnorm(141*81*92), c(141, 81, 92))) names(dimnames(x)) <- c("long", "lat", "days") # collapse over days str(rowMeans(x, dims = 2)) # collapse over lat x_new <- aperm(x, c("lat", "long", "days")) str(colMeans(x_new)) Cheers, Denes > > E.g. > > (A <- array(1:24,c(2,3,4))) > apply(A, c(1,2), mean) > apply(A, c(1,3), mean) > > -pd > >> >> >> Thanks guys. >> >> ______________________________________________ >> R-help at 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. >