2013-02-23 4 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. Я думаю, что часть кода влияет на мой вывод. Как я могу избавиться от этого, не нарушая выход?

Вот некоторые данные, чтобы проиллюстрировать мои проблемы ... но все мои реальные данные заканчивается в 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 и т.д.

EDIT добавить 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

измените заголовок вопроса, это слишком неоднозначно :) –

ответ

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

говоря переменный вырезать и означает время и т.д. –

+0

@MarcoDeNiro я думаю, что это то, что вы хотите? скопируйте и вставьте мой код в R и скажите мне, почему эти результаты не то, что вам нужно. :) –

+0

Спасибо anthony, но я предпочитаю вывод из другого кода ... Но функция findOverlaps, я думаю, мои данные ... Что делает findOverlaps? Я говорю это, потому что код, о котором я упоминал ранее, хорошо работает, когда я обрабатываю только один набор данных ... что у меня есть только один столбец времени и скорости –

Смежные вопросы