This should do it for you. It makes use of 'rle' to find the 'runs' of
thresholds and then changes the values to the sequence numbers
> x <- "time value
+ 1 5
+ 2 10
+ 3 7
+ 4 10
+ 5 19
+ 6 21
+ 7 20
+ 8 18
+ 9 10
+ 10 7
+ 11 8
+ 12 12
+ 13 17
+ 14 19
+ 15 24
+ 16 18
+ 17 15
+ 18 10
+ 19 9
+ "
> x <- read.table(textConnection(x), header=TRUE)
> # find the 'runs' of thresholds
> threshold <- rle(x$value >= 17)
> # get offset of each group
> offset <- cumsum(c(1,threshold$lengths))
> # create sequence numbers for the groups
> seqNum <- cumsum(threshold$value)
> # compute the indices of where the thresholds are
> x$group <- NA # initialize the vector
> # change the values for the groups
> for (i in which(threshold$value)){
+ x$group[seq(offset[i], length=threshold$length[i])] <- seqNum[i]
+ }
> # extract max for each group
> x
time value group
1 1 5 NA
2 2 10 NA
3 3 7 NA
4 4 10 NA
5 5 19 1
6 6 21 1
7 7 20 1
8 8 18 1
9 9 10 NA
10 10 7 NA
11 11 8 NA
12 12 12 NA
13 13 17 2
14 14 19 2
15 15 24 2
16 16 18 2
17 17 15 NA
18 18 10 NA
19 19 9 NA
> tapply(x$value, x$group, max)
1 2
21 24
On 5/21/07, Robert <[EMAIL PROTECTED]> wrote:
>
> Hi dear R users,
>
> I'm a R beginner and I have a basic question about sequential treatments
> of lists.
>
> I have a time based (i.e. events are consecutive) list of values of a
> biological property.
>
> Like :
>
> time value
> 1 5
> 2 10
> 3 7
> 4 10
> 5 19
> 6 21
> 7 20
> 8 18
> 9 10
> 10 7
> 11 8
> 12 12
> 13 17
> 14 19
> 15 24
> 16 18
> 17 15
> 18 10
> 19 9
> [...]
>
>
> And I have to define a threshold and to attach each event to his group,
> i.e. values upper the threshold.
>
> Like, for a threshold value of 17
>
> time value group
> 1 5 NA
> 2 10 NA
> 3 7 NA
> 4 10 NA
> 5 19 1
> 6 21 1
> 7 20 1
> 8 18 1
> 9 10 NA
> 10 7 NA
> 11 8 NA
> 12 12 NA
> 13 17 2
> 14 19 2
> 15 24 2
> 16 18 2
> 17 15 NA
> 18 10 NA
> 19 9 NA
> [...]
>
>
> The only solution that I have found is to do a sequentially read and write
> :
> for(i in 1:length(my_events_list))
> {
> [...]
> }
>
> But I very slow. Do you have another ideas ?
>
> And after I need to extract maximum values for each group
> Like :
> group max_value
> 1 21
> 2 24
> [...]
>
> and for each event which is part of a group to know if is't a ascending
> phase or no.
>
>
> Yes, lot of questions !! Sorry, but I think that the solution may be
> unique.
>
> In advance, thank you a lot
>
> regards
>
> JS
>
>
>
>
>
>
>
>
> _____________________________________________________________________________
>
> ______________________________________________
> [email protected] 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?
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.