在R中找到圆形系列中的3个连续最高值

时间:2016-10-31 11:38:06

标签: r circular-list

我有以下表格的数据(2个例子):

p1 <- structure(c(1.38172177074188, 1.18601365390563, 1.25131938561825, 
1.07175353794277, 0.887770295772917, 0.806599968169486, 0.843543355495394, 
0.889051695167723, 0.764131945540256, 0.699309441111923, 0.945165791967098, 
1.31310409471336), .Dim = 12L)

p2 <- structure(c(1.24801075135611, 1.06280347993594, 1.21410288703334, 
1.36797720634294, 1.07291218307332, 0.936924063490867, 0.819723966406961, 
0.854960740335283, 0.718565087630857, 0.649827141012991, 0.785853771875901, 
1.04368795443605), .Dim = 12L)

这些是每月标准化的水文时间序列;所谓的Pardé政权,提供了一些关于年度季节性的指示。为了进一步分析,我需要从这些Pardé系列中获得3个最高和最低月份。因为季节性可以是双峰的,我需要确定3个最高/最低连续数据点(通常不是三个绝对最高/最低数据点,参见示例)以得出最多的时间干湿期。到目前为止,由于时间序列的循环特征,我失败了,这是一个特殊的挑战。 有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您可以使用filter。它将连续值相加并可以处理循环时间序列。

f1 <- stats::filter(p1, c(1, 1, 1), circular = TRUE, sides = 1)
#Time Series:
#  Start = 1 
#End = 12 
#Frequency = 1 
#[1] 3.639992 3.880840 3.819055 3.509087 3.210843 2.766124 2.537914 2.539195 2.496727 2.352493 2.408607 2.957579
((which.max(f1) - (3:1)) %% 12) + 1
#[1] 12  1  2