2

つまり、基本的に、Time 列を 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

代わりに10時間間隔を使用したソリューションを次に示します(テストする間隔が1つしかないため):

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 に答える
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 に答える