首页 > 解决方案 > 如何找到时间序列中的第一个极值(峰值)并提取 R 中的值

问题描述

我试图找到时间序列中的峰值。在这种情况下,我正在寻找以下数据的第一个最小值和第一个最大值(极值):

data <- data.table(x = c(1, 2, 3, 4, 5, 6, 7, 8),
                   y = c(1, -1, 2, 3, 3, 1, 3, 1))

我可以使用包的stat_peaks功能ggpmisc和参数来做到这一点span = NULL。但是现在我想提取这些峰值的值,所以我find_peaks也尝试了这个ggpmisc包,但我不能再使用这个参数span = NULL了。如何提取stat_peaksandstat:valleys函数的值?我无法在数据中找到峰值,只能在可视化中找到。

data %>%
   ggplot(aes(x = x, y = y)) +
   geom_line() +
   stat_peaks(col = "red", span = NULL, ignore_threshold = 0.01) +
   stat_valleys(col = "blue", span = NULL, ignore_threshold = 0.01)

标签: rtime-series

解决方案


您正在使用的包 (ggpmisc) 是 ggplot2 的扩展,因此它仅用于绘图。要获取峰值和谷值的位置,您可以使用其他软件包 - 例如函数 quantmod::findPeaks 和 quantmod::findValleys 可能是一种解决方案。有关更多详细信息,请参阅此帖子

我不知道这些功能是否与您正在使用的包一致——我假设它们使用不同的标准来查找峰值和谷值。

请注意,这些函数在时间序列中的任何峰值之后返回位置索引。您可以通过纠正这个来获得高峰和低谷:

 peaks <- quantmod::findPeaks(data$y) -1
 valleys <- quantmod::findValleys(data$y) -1

推荐阅读