[R] replacing segments of vector by their averages
jim holtman
jholtman at gmail.com
Fri Jun 20 14:36:34 CEST 2008
Does this give you the results you are expecting:
> m <- c(0.3,0.3,0.3,0.1,0.1,0.5,0.5,0.5,0.5,0.15,0.15,0.3,0.5,0.8)
> m > 0.2
[1] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE
TRUE TRUE TRUE
> m.rle <- rle(m > 0.2)
> offsets <- 1 + c(0, head(cumsum(m.rle$lengths), -1))
> # initialize the output results
> results <- numeric(length(m.rle$values))
> results[] <- NA
>
> for (i in seq_along(m.rle$values)){
+ if (m.rle$values[i]){ #numbers > 0.2
+ results[i] <- mean(m[seq(offsets[i], length=m.rle$lengths[i])])
+ }
+ }
> results
[1] 0.3000000 NA 0.5000000 NA 0.5333333
>
On Thu, Jun 19, 2008 at 4:55 AM, Daren Tan <daren76 at hotmail.com> wrote:
>
> Given a vector of numeric of length n, I need to find segments that are >= 0.2, compute the average of individual segments, and replace the original values in each segment by their corresponding averages.
>
> For example, there are three segments that are >= 0.2, the average of 1st segment is 0.3, 2nd is 0.5, and the 3rd is 0.5333333
>
>> c(0.3,0.3,0.3,0.1,0.1,0.5,0.5,0.5,0.5,0.15,0.15,0.3,0.5,0.8) [1] 0.30 0.30 0.30 0.10 0.10 0.50 0.50 0.50 0.50 0.15 0.15 0.30 0.50 0.80> m >= 0.2 [1] TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE[13] TRUE TRUE
>
> _________________________________________________________________
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390
What is the problem you are trying to solve?
More information about the R-help
mailing list