r - 从 R 中的时间序列数据中分离峰值

标签 r

我正在处理 15 分钟的流数据(一列日期时间,一列流)。我想编写代码来查找超过某个阈值的峰值( Storm )并在数据回落到基流阈值之前选择数据。我想隔离这些高峰和衰退部分,然后从水质指标的其他时间序列数据中选择相同的时间段。

我已经尝试了 pracma 包的 findpeaks 函数,它给我的输出是峰值及其起点和终点的索引,但我不知道如何将这些索引转换回日期时间,以便我可以从另一个中进行选择时间序列。

我还尝试了 Hystrostats 包中的 find.spell.lengths。它返回拼写长度,但我不知道如何将其转换回日期时间间隔。此外,这个包似乎是为每日数据(不是 15 分钟数据)设计的,所以我不知道这是否会弄乱结果。

我应该使用不同的包或函数,或者有更好的方法来做到这一点吗?

最佳答案

我想你快到了。我只是模拟了一些数据并使用了 pracma 包。您提到在获取日期时遇到问题,您所做的是使用从 findpeak 调用返回的索引,并根据此对数据帧进行子集化,

例如,要获取绝对峰值的日期时间,请执行以下操作:

peaks <-findpeaks(stream_data$streamflow, minpeakheight = 1, minpeakdistance = 4, sortstr = FALSE)
stream_data[peaks[,2],"datetime"]

所以请参阅下面的代码,了解如何回拨它们。
library(pracma)
#simulate data using pracma findpeaks example
x <- seq(0, 1, len = 1024)
     pos <- c(0.1, 0.13, 0.15, 0.23, 0.25, 0.40, 0.44, 0.65, 0.76, 0.78, 0.81)
     hgt <- c(4, 5, 3, 4, 5, 4.2, 2.1, 4.3, 3.1, 5.1, 4.2)
     wdt <- c(0.005, 0.005, 0.006, 0.01, 0.01, 0.03, 0.01, 0.01, 0.005, 0.008, 0.005)

pSignal <- numeric(length(x))
for (i in seq(along=pos)) {
             pSignal <- pSignal + hgt[i]/(1 + abs((x - pos[i])/wdt[i]))^4
     }

#give a datetime
START = as.POSIXlt("2018-09-07 10:00:00")
END = as.POSIXlt("2018-09-16 10:00:00")
#make your data frame
stream_data = data.frame(
       datetime=seq(START,END,length.out=length(pSignal)),
       streamflow=pSignal)
#plot
with(stream_data,plot(datetime,streamflow,type="l"))
#call peaks like you did
peak <-findpeaks(stream_data$streamflow, minpeakheight = 1, minpeakdistance = 4, sortstr = FALSE)
## call
data.frame(
       peak_number = 1:nrow(peak),
       peak_max = stream_data[peak[,2],"datetime"],
       peak_heigth = stream_data[peak[,2],"streamflow"],
       peak_start = stream_data[peak[,3],"datetime"],
       peak_end = stream_data[peak[,4],"datetime"]
)

enter image description here

关于r - 从 R 中的时间序列数据中分离峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942623/

相关文章:

r - 使用 substr 函数将列中字符的首字母大写

r - 取消嵌套数据框并用 NA 填充新行

r - R中的子设置/匹配行和列

r - 是否可以将百分比添加到列联表中

R 用户:如何卸载使用 devtools::install_github ("username/repo"安装的软件包)

r - Sourcing 脚本不会将任何输出打印到控制台

r - 将 data.frame 转换为列表列表

r - 在Heatmap.2中设置距离矩阵和聚类方法

运行 Map 减少矩阵的维数

r - dplyr mutate_at 函数应用于多个列 - 使用动态列名称