1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#exemple : ici il y a trois séries de moyenne 2, 4 et 2.5
x<-c(0,0,0,3,1,2,0,0,0,5,4,3,0,0,2,3)
n<-length(x)
#on récupère le premier indice non nul pour chaque serie
x2<-c(x[1],as.numeric(x[2:n]!=0 & x[1:(n-1)]==0))
> x2
[1] 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0
#et on se rend compte qu'un cumsum de x2 conditionné par x!=0 revient à identifier le numéro de tes séries!
> cumsum(x2)*(x!=0)
[1] 0 0 0 1 1 1 0 0 0 2 2 2 0 0 3 3
#il ne reste qu'à faire la moyenne
> tapply(x,cumsum(x2)*(x!=0),mean)
0 1 2 3
0.0 2.0 4.0 2.5
#le tout sans boucle! ;) |
Partager