2013-02-23 97 views
0

我已經問了很多關於這個問題的問題,所有的答案都很有幫助......但是我的數據又一次很奇怪,我需要幫助......基本上,我想要做的是找到在一定的時間間隔內的平均速度...可以說從6秒到40秒我的平均速度將是5米/秒...等等等等。 所以有人指出我使用這個代碼.. 。R編程幫助編輯代碼

library(IRanges) 
idx <- seq(1, ncol(data), by=2) 
# idx is now 1, 3, 5. It will be passed one value at a time to `i`. 
# that is, `i` will take values 1 first, then 3 and then 5 and each time 
# the code within is executed. 
o <- lapply(idx, function(i) { 
    ir1 <- IRanges(start=seq(0, max(data[[i]]), by=401), width=401) 
    ir2 <- IRanges(start=data[[i]], width=1) 
    t <- findOverlaps(ir1, ir2) 
    d <- data.frame(mean=tapply(data[[i+1]], queryHits(t), mean)) 
    cbind(as.data.frame(ir1), d) 
}) 

這給該輸出

# > o 
# [[1]] 
# start end width mean 
# 1  0 400 401 1.05 
# 
# [[2]] 
# start end width mean 
# 1  0 400 401 1.1 
# 
# [[3]] 
# start end width  mean 
# 1  0 400 401 1.383333 

所以,如果我想這是每100秒......我就改ir1 <- ....., by = 401變成by=100

但我的數據是因爲一些事情

  1. 我的數據總不與0秒有時它開始於20秒......這取決於在試樣上,以及它是否移動
  2. 我的數據開始怪異收集不會每1秒或2秒或3秒發生。因此,有時候我會得到1-20秒的數據,但它會跳過20-40秒,只是因爲樣本不移動。
  3. 我認爲代碼的findOverlaps部分會影響我的輸出。如何在不干擾輸出的情況下襬脫這種情況?

下面是一些數據來說明我的煩惱......但我所有的真實數據在2000年

Time Speed Time Speed Time Speed 
6.3 1.6 3.1 1.7 0.3 2.4 
11.3 1.3 5.1 2.2 1.3 1.3 
13.8 1.3 6.3 3.4 3.1 1.5 
14.1 1.0 7.0 2.3 4.5 2.7 
47.4 2.9 11.3 1.2 5.1 0.5 
49.2 0.7 26.5 3.3 5.9 1.7 
50.5 0.9 27.3 3.4 9.7 2.4 
57.1 1.3 36.6 2.5 11.8 1.3 
72.9 2.9 40.3 1.1 13.1 1.0 
86.6 2.4 44.3 3.2 13.8 0.6 
88.5 3.4 50.9 2.6 14.0 2.4 
89.0 3.0 62.6 1.5 14.8 2.2 
94.8 2.9 66.8 0.5 15.5 2.6 
117.4 0.5 67.3 1.1 16.4 3.2 
123.7 3.2 67.7 0.6 26.5 0.9 
124.5 1.0 68.2 3.2 44.7 3.0 
126.1 2.8 72.1 2.2 45.1 0.8 

結束正如你可以從數據看到,它並不一定是60秒結束等,有時它只能在57等結束

編輯添加dput數據

structure(list(Time = c(6.3, 11.3, 13.8, 14.1, 47.4, 49.2, 50.5, 
57.1, 72.9, 86.6, 88.5, 89, 94.8, 117.4, 123.7, 124.5, 126.1), 
    Speed = c(1.6, 1.3, 1.3, 1, 2.9, 0.7, 0.9, 1.3, 2.9, 2.4, 
    3.4, 3, 2.9, 0.5, 3.2, 1, 2.8), Time.1 = c(3.1, 5.1, 6.3, 
    7, 11.3, 26.5, 27.3, 36.6, 40.3, 44.3, 50.9, 62.6, 66.8, 
    67.3, 67.7, 68.2, 72.1), Speed.1 = c(1.7, 2.2, 3.4, 2.3, 
    1.2, 3.3, 3.4, 2.5, 1.1, 3.2, 2.6, 1.5, 0.5, 1.1, 0.6, 3.2, 
    2.2), Time.2 = c(0.3, 1.3, 3.1, 4.5, 5.1, 5.9, 9.7, 11.8, 
    13.1, 13.8, 14, 14.8, 15.5, 16.4, 26.5, 44.7, 45.1), Speed.2 = c(2.4, 
    1.3, 1.5, 2.7, 0.5, 1.7, 2.4, 1.3, 1, 0.6, 2.4, 2.2, 2.6, 
    3.2, 0.9, 3, 0.8)), .Names = c("Time", "Speed", "Time.1", 
"Speed.1", "Time.2", "Speed.2"), class = "data.frame", row.names = c(NA, 
-17L)) 
+0

請說變量削減ü意味着時間等 – 2013-02-23 15:20:04

回答

0

對不起,如果我完全不理解你的問題,你能解釋爲什麼這個例子不能做你想做的事嗎?

# use a pre-loaded data set 
mtcars 

# choose which variable to cut 
var <- 'mpg' 

# define groups, whether that be time or something else 
# and choose how to cut it. 
x <- cut(mtcars[ , var ] , c(-Inf , seq(15 , 25 , by = 2.5) , Inf)) 

# look at your cut points, for every record 
x 

# you can merge them back on to the mtcars data frame if you like.. 
mtcars$cutpoints <- x 
# ..but that's not necessary 

# find the mean within those groups 
tapply( 
    mtcars[ , var ] , 
    x , 
    mean 
) 


# find the mean within groups, using a different variable 
tapply( 
    mtcars[ , 'wt' ] , 
    x , 
    mean 
) 
+0

?複製並粘貼我的代碼到R並告訴我爲什麼這些結果不是你所需要的.. :) – 2013-02-23 15:26:37

+0

@MarcoDeNiro我認爲這是你想要的編輯問題的標題,這太曖昧:) – 2013-02-23 15:29:46

+0

謝謝安東尼,但我更喜歡從其他代碼的輸出...但findOverlaps函數,我認爲,我的數據了...什麼findOverlaps確實?我這樣說是因爲我之前提到的代碼在我只處理1組數據時運作良好...意味着我只有一列時間和速度 – 2013-02-23 15:32:47