Сначала вам нужно создать переменную id
, которая определяет ваши группы, не полагаясь на то, что они являются последовательными. После этого все довольно просто.
> dat <- data.frame( TimeOffset = c(0,.1,.2,.4,.6,1.1,1.4,1.6,1.9,2.1),
+ Source=c(1,1,1,2,2,1,1,2,2,1),
+ Length=c(1500,1000,50,25,3,1500,18,2500,18,37))
> dat
TimeOffset Source Length
1 0.0 1 1500
2 0.1 1 1000
3 0.2 1 50
4 0.4 2 25
5 0.6 2 3
6 1.1 1 1500
7 1.4 1 18
8 1.6 2 2500
9 1.9 2 18
10 2.1 1 37
>
> id <- cumsum(c(TRUE,diff(dat$Source)!=0))
> id
[1] 1 1 1 2 2 3 3 4 4 5
>
> cbind(TimeOffset=tapply(dat$TimeOffset,id,max),
+ Source=tapply(dat$Source,id,max),
+ Length=tapply(dat$Length,id,sum))
TimeOffset Source Length
1 0.2 1 2550
2 0.6 2 28
3 1.4 1 1518
4 1.9 2 2518
5 2.1 1 37