Я хочу создать двойное скользящее окно в петле для петли. Набор примеров данных может выглядеть следующим образом:Двойное раздвижное окно
a <- structure(list(a = c(0.0961136, 0.1028192, 0.1106424, 0.1106424,
0.117348, 0.117348, 0.117348, 0.122936, 0.1307592, 0.1307592,
0.1318768, 0.1318768, 0.1385824, 0.1385824, 0.1318768, 0.1251712,
0.1251712, 0.1251712, 0.1251712, 0.1251712)), .Names = "a", row.names = c(NA,
-20L), class = "data.frame")
код я до сих пор выглядит следующим образом:
windowSize <- 5
windowStep <- 1
dat <- list()
for (i in seq(from = 1, to = nrow(a), by = windowStep)){
window1 <- a[i:windowSize, ]
window2 <- a[i:windowSize + windowSize, ]
if (median(window1) <= 0.12 && (median(window1) >= 0.08)) {
p <- "True"
} else
p <- "not"
dat[[i]] <- c(p)
}
result <- as.data.frame(do.call(rbind, dat))
Этот пример показывает, что я требую два окна размером 5 (точек данных), чтобы скользить один перед другой по 1 точке данных за раз. Этот пример не использует окно 2, потому что он не работает! (Мне нужно, чтобы он работал в конечном итоге). Однако использование только окна1 для вычисления медианы (в данном случае) на каждом шаге работает, но выход неверен. Операторы if утверждают, что если медиана окна 1 находится между 0.08 и 0.12, тогда выведите «True» еще «нет».
Выход для моего цикл =
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 not
11 not
12 not
13 not
14 not
15 not
16 not
17 not
18 not
19 not
20 not
Правильный выход как проверяется с помощью rollapply (и, очевидно, можно увидеть невооруженным глазом)
rollapply(a, 5, FUN = median, by = 1, by.column = TRUE, partial = TRUE, align = c("left"))
должно быть:
1 True
2 True
3 True
4 not
5 not
6 not
7 not
8 not
9 not
10 not
11 not
12 not
13 not
14 not
15 not
16 not
17 not
18 not
19 not
20 not
Могли решение остается как цикл цикла, если это возможно, поскольку у меня есть гораздо больше, чтобы добавить, но сначала нужно получить это право. Благодарю.
Может быть, это может помочь вам: http://stackoverflow.com/questions/35039361/summing-the-counts-in-a-data-frame -using-slide-window/35040537 # 35040537 – Jaap
Спасибо, но в идеале я хочу сохранить его как цикл for, потому что в конечном итоге я хотел бы добавить дополнительные критерии для окон. – PharmR
hint: 'i' переходит от' 1' к 'nrow (a)', ваш оператор подмножества переходит из 'i' в' windowSize'. Что происходит, когда 'i> windowSize'? – Vlo