2

所以基本上,我有这段代码可以让我将我的时间列分成 50 小时间隔 这是代码....我需要帮助来编写差异(差异-我在下面放一个空格)函数...我解释了这个再往下看

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   

多谢你们

4

2 回答 2

1

这个怎么样?(例如,使用像@Tyler 这样的 10 小时间隔)

# 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 
于 2013-03-14T13:42:51.627 回答
1

这是我使用 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
于 2013-03-14T13:39:08.060 回答