Use kronecker products. For example,
> mat <- matrix(1001:1144, 12, 12)
> result <- k1 <- matrix(1:9, 3, 3)
> k2 <- matrix(1, 4, 4) # size of one block
> result[] <- tapply(mat, kronecker(k1, k2), mean)
> result
[,1] [,2] [,3]
[1,] 1020.5 1068.5 1116.5
[2,] 1024.5 1072.5 1120.5
[3,] 1028.5 1076.5 1124.5> mean(mat[1:4, 1:4]) # check first block
[1] 1020.5
On Sat, Aug 2, 2008 at 9:28 AM, Steve Murray <smurray444 at hotmail.com>
wrote:>
> Dear all,
>
> I have a data frame of 2160 rows and 4320 columns, which I hope to condense
to a smaller dataset by finding averages of 6 by 6 blocks of values (to produce
a data frame of 360 rows by 720 columns).
>
> How would I go about finding the mean of a 6 x 6 block, then find the mean
of the next adjacent 6 x 6 block, and so on, until the whole data frame has been
covered?
>
> One slight twist is that I have NA values, which I don't want to be
included in the calculations unless a particular 6 x 6 block is entirely
composed of NA values - in which case, NA should be the output value.
>
> Thanks very much for any advice and solutions.
>
> Steve
>
> _________________________________________________________________
> Get Hotmail on your mobile from Vodafone
>
> ______________________________________________
> R-help at 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.
>