r - 如何找到时间序列中的第一个极值(峰值)并提取 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_peaks
andstat: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)
解决方案
您正在使用的包 (ggpmisc) 是 ggplot2 的扩展,因此它仅用于绘图。要获取峰值和谷值的位置,您可以使用其他软件包 - 例如函数 quantmod::findPeaks 和 quantmod::findValleys 可能是一种解决方案。有关更多详细信息,请参阅此帖子。
我不知道这些功能是否与您正在使用的包一致——我假设它们使用不同的标准来查找峰值和谷值。
请注意,这些函数在时间序列中的任何峰值之后返回位置索引。您可以通过纠正这个来获得高峰和低谷:
peaks <- quantmod::findPeaks(data$y) -1
valleys <- quantmod::findValleys(data$y) -1
推荐阅读
- hosting - GoDaddy 不显示新添加的文件
- visual-studio - Entity Framework Core 3.1 不会为 SQLite 表中的实体属性生成正确的数据类型
- cassandra - 启动 Cassandra 多节点集群的问题
- nestjs - 如何在配置案例中使用 DynamicModule?
- android - 无法禁用点击日期选择器
- prolog - 为什么我不能将 OWL 类存储在变量中?
- java - PDFTranscoder (org.apache.fop) 是否支持超链接?
- selenium-webdriver - 无法使用 Jmeter/Selenium/Java 打开 chrome 设置或下载页面
- http - Http 会话过期
- windows - 读取 pendrive 时 CreateFile() 失败,错误代码 32