2013-03-14 61 views
2

所以基本上,我有这个代码,让我分开我的时间列成50小时的间隔 这是代码....我需要帮助写在差异DIFF-我把一个空格下方)功能......我解释这个进一步下面找到使用R编程在同一列中的两行之间的差异

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 

谢谢你们

回答

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 
1

如何ABO这个? (例如使用@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