r语言 - "day of year"数据的运行平均值



我试图弄清楚如何将我平均的数据平滑到"一年中的一天"数据。我将以下示例代码中的问题简化为最小值。在我的实际脚本中,我计算了一个数据框架,该数据框具有1到365的"一年中"索引列,第二列是多年来当天的特定测量平均值。我试图通过在此数据上计算集中的跑步平均值(例如11天(来进一步平滑数据。

我很难弄清楚如何有效处理"日历中断",这意味着在"一天的开始和结束"数据的开始和结束时,我需要越过doy = 365返回doy = 1。当平均值从一天= 360到day = 5的平均值运行时,我该如何计算跑步平均值?

我开始一起解决一个解决方案,但很快到达了优雅的代码。是否有有效的手段?

下面的示例提供了一个带试验数据的示例数据框架。

# A simulated daily time series average
ann_data <- data.frame(day=seq(1,365,1), data=
(sin(pi*seq(1:365)/182+90)+rnorm(365)/10)) 
plot(ann_data)
ann_data_smooth <- ?

如果您已经知道如何进行平均运行平均值,只需将数据复制到本身的末尾,计算运行平均值,然后再次限制它。例如

yearDataLength <- length(yearData)
yearData <- c(yearData, yearData)
runningAve <- running_average_function(yearData)[1:yearDataLength]

running_average_function是您当前使用的任何功能。1:yearDataLength位仅限制了应用功能后所采用的范围。在这样的周期性数据平滑时,这样做是很常见的。如果您还需要开始与末端一致的话,而不是服用1:yearDataLength,则将数据的50%而不是前50%。

编辑:重新阅读后,我看到您也担心开始。这意味着,如果使用上述方法,则可以从5:(yearDataLength+4)(仅5:369(中获取数据。这为其提供了整个日历中间计算所需的空间。

您的索引仍应从副本中进行机智,因此,一旦拥有该范围,只需使用 sort函数使用索引列以正确的顺序将数据恢复。

相关内容

最新更新