2013-02-23 121 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