在“一年中的一天”数据上运行平均值

问题描述 投票:0回答:1

我试图弄清楚如何将我平均的数据平滑到“一年中的一天”数据。我已将下面的示例代码中的问题简化为最小可能。在我的实际脚本中,我计算了一个数据框,其中包含从1到365的“一年中的一天”索引列和第二列,该列是多年中该年中某一天的特定度量的平均值。我试图通过计算此数据的居中运行平均值(例如11天)来进一步平滑数据。

我正在努力弄清楚如何有效地处理“日历中断”,这意味着在“日期”数据的开始和结束时,我需要将DoY = 365转换回DoY = 1。当平均值的中心从白天= 360到白天= 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 <- ?
r mean
1个回答
0
投票

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

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函数使用索引列以正确的顺序恢复数据。

© www.soinside.com 2019 - 2024. All rights reserved.