On Sat, Mar 24, 2012 at 03:49:28AM -0700, Alaios wrote:> Dear all,
> I am reading with R some measurements vectors from an external device.
> The length of each vector (containing numbers) is not constant.
> 
> I would like by doubling the numbers of elements I select to shrink the
vector to a new one
> 
> Let's call the vector I read from the device as oldvector 
> 
> 
> and the shrinked version of it as newVersion
> 
> I want to have
> newVersion[1]<- mean(oldvector[1])
> newVersion[2]<- mean(oldvector[2:3])
> newVersion[3]<- mean(oldvector[4:7])
> newVersion[4]<- mean(oldvector[8:15])
> 
> as I said the length of oldvector is not the same sol it might be also the
case that the last window will not find the corresponding number of elements.
> 
> How I can handle that in R?
Hi.
You asked a similar question at
  https://stat.ethz.ch/pipermail/r-help/2012-March/306188.html
The current formulation is more accurate. Let me recall one of
the previous solutions suitable for the current situation
  oldvector <- 1:20
  ilog <- floor(log2(1:length(oldvector)))
  ilog
  [1] 0 1 1 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4
  
  newVersion <- unname(tapply(oldvector, ilog, FUN = mean))
  newVersion
  [1]  1.0  2.5  5.5 11.5 18.0
Here, newVersion[1] is mean(oldvector[which(ilog == 0)]), where
 which(ilog == 0) # [1] 1
newVersion[1] is mean(oldvector[which(ilog == 1)]), where
  which(ilog == 1) # [1] 2 3
also
  which(ilog == 2) # [1] 4 5 6 7
  which(ilog == 3) # [1]  8  9 10 11 12 13 14 15
  which(ilog == 4) # [1] 16 17 18 19 20
The last group ends at 20, so it is smaller than the previous one.
Hope this helps.
Petr Savicky.