Hi:
Here's one approach:
dat <- rnorm(40, 0, 2)
positions <- matrix(c(3, 4, 5, 8, 9, 10, 20, 21, 22, 30, 31, 32),
ncol = 3, byrow = TRUE)
# Subdata
t(apply(positions, 1, function(x) dat[x]))
[,1] [,2] [,3]
[1,] 0.5679765 1.429396 2.9050931
[2,] 4.0878845 -2.569012 2.1209280
[3,] 4.0295221 -2.659358 -1.3566887
[4,] 1.3109707 -1.745255 -0.9462857
# means of subdata> apply(positions, 1, function(x) mean(dat[x]))
[1] 1.63415529 1.21326693 0.00449164 -0.46019018
# or
colMeans(apply(positions, 1, function(x) dat[x]))
HTH,
Dennis
On Mon, Oct 10, 2011 at 7:56 AM, Martin Batholdy
<batholdy at googlemail.com> wrote:> Dear R-Users,
>
>
> I have the following two vectors:
>
> data ? <- ? rnorm(40, 0, 2)
>
> positions ? <- ? c(3, 4, 5, ? ? 8, 9, 10, ? ? 20, 21, 22, ? ? 30, 31,
32)
>
>
> now I would like to calculate the mean of every chunk of data-points (of
the data-vector) as defined by the positions-vector.
>
>
> So I would like to get a vector with the mean of element 3 to 5 of the
data-vector, 8 to 10, 20 to 22 and so on.
>
>
> The gaps between the chunks are arbitrary. There is no pattern (meaning the
gap from 5 to 8, 10 to 20, 22 to 30 etc.)
> But the chunks are always of length n (in this case 3).
>
>
> Is there a convenient way to do this without using a for-loop?
>
>
> thanks!
> ______________________________________________
> 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.
>