61
задан 25 December 2012 в 19:26

2 ответа

Поздно стороне, но это могло бы быть представляющим интерес для других. Можно в наше время использовать (внутреннюю) функцию find_peaks от ggpmisc пакет. Можно параметризовать его с помощью threshold, span и strict аргументы. С тех пор ggpmisc пакет нацелен на использование с ggplot2, можно непосредственно вывестись на печать минимумы и максимумы использование stat_peaks и stat_valleys функции:

set.seed(1)
x <- 1:10
y <- runif(10)
# Maxima
x[ggpmisc:::find_peaks(y)]
[1] 4 7
y[ggpmisc:::find_peaks(y)]
[1] 0.9082078 0.9446753
# Minima
x[ggpmisc:::find_peaks(-y)]
[1] 5
y[ggpmisc:::find_peaks(-y)]
[1] 0.2016819    
# Plot
ggplot(data = data.frame(x, y), aes(x = x, y = y)) + geom_line() + stat_peaks(col = "red") + stat_valleys(col = "green")

enter image description here

0
ответ дан 31 October 2019 в 15:27

Нахождение локальные максимумы и минимумы для не так легкая последовательность, например, 1 0 1 1 2 0 1 1 0 1 1 1 0 1 я дал бы их положения в (1), 5, 7.5, 11 и (14) для максимумов и 2, 6, 9, 13 для минимумов.

#Position                1 1 1 1 1
#      1 2 3 4 5 6 7 8 9 0 1 2 3 4
x <- c(1,0,1,1,2,0,1,1,0,1,1,1,0,1) #Frequency
#      p v     p v  p  v   p   v p  p..Peak, v..Valey

peakPosition <- function(x, inclBorders=TRUE) {
  if(inclBorders) {y <- c(min(x), x, min(x))
  } else {y <- c(x[1], x)}
  y <- data.frame(x=sign(diff(y)), i=1:(length(y)-1))
  y <- y[y$x!=0,]
  idx <- diff(y$x)<0
  (y$i[c(idx,F)] + y$i[c(F,idx)] - 1)/2
}

#Find Peaks
peakPosition(x)
#1.0  5.0  7.5 11.0 14.0

#Find Valeys
peakPosition(-x)
#2  6  9 13

peakPosition(c(1,2,3,2,1,1,2,1)) #3 7
0
ответ дан 31 October 2019 в 15:27

Другие вопросы по тегам:

Похожие вопросы: