使用R编程找到同一列中两行之间的差异

时间:2013-03-14 13:28:32

标签: r subtraction

所以基本上,我有这个代码,让我把我的时间列分成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   

谢谢你们

2 个答案:

答案 0 :(得分: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 :(得分: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