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