Есть ли функция R для поиска локальных мин и макс? - PullRequest
0 голосов
/ 30 марта 2020

Есть ли в R функция, которая может принимать вектор в качестве входного и выходного вектора с локальными минимумами и максимумами и где они встречаются в исходном векторе?

1 Ответ

0 голосов
/ 30 марта 2020

Пусть v будет простым вектором и определит пик как элемент, который строго больше, чем элементы с обеих сторон, и аналогично для впадины.

1) rollapply Затем следующее дает два логических вектора, каждый из которых имеет ту же длину, что и v. Один указывает позиции пиков, используя TRUE и FALSE для других позиций, а другой указывает впадины в тех же манера. which(peaks) и which(troughs) могут быть использованы для получения индексных чисел, если это представление предпочтительнее.

library(zoo)

peaks <- rollapply(v, 3, function(x) x[2] > max(x[-2]), fill = FALSE)
troughs <- rollapply(v, 3, function(x) x[2] < min(x[-2]), fill = FALSE)

Мы можем объединить их так, где каждый выходной компонент равен 1, если это пик, -1 если это корыто и 0 в противном случае.

extreme <- function(x) (x[2] > max(x[-2])) - (x[2] < min(x[-2]))
rollapply(v, 3, extreme, fill = FALSE)

2) Base R Базовый метод R будет:

prev <- c(NA, v[-length(v)])
post <-  c(v[-1], NA)
(v > pmax(prev, post)) - (v < pmin(prev, post))
...