поиск разницы между двумя строками в одном столбце с использованием программирования R

Итак, в основном, у меня есть этот код, который позволяет мне разделить столбец времени на 50-часовые интервалы. Это код .... Мне нужна помощь в написании функции разницы (diff - я поставил пробел ниже) ... Я объяснил это ниже

Time<- seq(1, ncol(analyse), by=2)
o <- lapply(Time, function(i){  
xf1 <- IRanges(start=seq(0, max(analyse[[i]]), by=50), width=50)
xf2 <- IRanges(start=data[[i]], width=1)
t <- findOverlaps(xf1, xf2)
diff <-_____________________________________
d <- data.frame(Diff=tapply(data[[i+1]], queryHits(t), diff))
cbind(as.data.frame(xf1), d)})

Это мои образцы данных

Time(hr)  Kilometres reached
1.7        2.0   
2.4       15.6
6.8       23.1
9.3       11.5
11.6      12.3
23.4      1.3
28.4      9.7
30.1      15.2
35.7      16.3
42.3      15.8
48.2      14.6
50.0      14.2  

Итак, когда мой код разделил мое время на 50-часовые интервалы.... Я хочу, чтобы он захватил последнее значение интервала с первым значением в течение этого интервала.... например, я хочу такой же вывод

Time(hr)   Kilometres reached
50         12.2 (based from the sample data mentioned= 14.2-2.0)        
100   

Спасибо, парни


person Laurence Cais    schedule 14.03.2013    source источник


Ответы (2)


Как насчет этого? (например, используя 10-часовые интервалы, такие как @Tyler)

# assuming your data.frame is sorted by Time.hr.
require(IRanges)
ir1 <- IRanges(df$Time.hr., width=1)
sq  <- seq(10, max(df$Time.hr., by=10)+10, by=10)
ir2 <- IRanges(start = c(0, head(sq, -1)) + 1, end = sq)

olaps <- findOverlaps(ir2, ir1)
tapply(subjectHits(olaps), sq[queryHits(olaps)], 
        function(x) df$Kilometres[max(x)] - df$Kilometres[min(x)])
#  10   20   30   40   50 
#  9.5  0.0 13.9  0.0 -1.6 
person Arun    schedule 14.03.2013

Вот решение, в котором вместо этого я использовал 10-часовые интервалы (поскольку у вас есть только один интервал для тестирования):

dat <- read.table(text="Time  Kilometres
1.7        2.0   
2.4       15.6
6.8       23.1
9.3       11.5
11.6      12.3
23.4      1.3
28.4      9.7
30.1      15.2
35.7      16.3
42.3      15.8
48.2      14.6
50.0      14.2", header=TRUE)


ints <- seq(0, 50, by=10)
dat$new <- cut(dat$Time, ints)
out <- sapply(split(dat$Kilometres, dat$new), function(x) diff(c(x[1], tail(x, 1))))
data.frame(Time = ints[-1], Kilometres =out, row.names=NULL)

Урожайность:

  Time Kilometres
1   10        9.5
2   20        0.0
3   30        8.4
4   40        1.1
5   50       -1.6
person Tyler Rinker    schedule 14.03.2013