R pomoc w programowaniu w edycji kodu
Zadałem wiele pytań na ten temat, a wszystkie odpowiedzi były naprawdę pomocne ... ale po raz kolejny moje dane są dziwne i potrzebuję pomocy ... Zasadniczo to, co chcę zrobić, to znaleźć średnią prędkość w pewnym przedziale interwałów ... powiedzmy, że od 6 s do 40 s moja średnia prędkość wynosiłaby 5 m / s ... itd. itd. Więc wskazano mi, aby użyć tego kodu ...
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)
})
co daje ten wynik
# > 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
Więc jeśli chciałbym, żeby to było co 100 s ... Po prostu się zmienięir1 <- ....., by = 401
zostaćby=100
.
Ale moje dane są dziwne z powodu kilku rzeczy
moje dane nie zawsze zaczynają się od 0 s, czasami zaczynają się od 20 s ... w zależności od próbki i od tego, czy się poruszaMoje gromadzenie danych nie odbywa się co 1s lub 2s lub 3s. Stąd czasami dostaję dane 1-20 s, ale przeskakuje w ciągu 20-40 s, ponieważ próbka nie porusza się.Myślę żefindOverlaps
część kodu wpływa na moje dane wyjściowe. Jak mogę się tego pozbyć bez zakłócania wyjścia?Oto kilka danych ilustrujących moje problemy ... ale wszystkie moje prawdziwe dane kończą się w 2000 roku
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
Jak widać z danych, niekoniecznie kończy się to za 60 s. Itd. Czasami kończy się dopiero na 57 itd
EDYTOWAĆ dodaj dput danych
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))