【发布时间】:2020-03-29 17:52:03
【问题描述】:
基本问题:
我是 R 新手(以及一般编程),所以如果这篇文章的格式不正确,我深表歉意。我目前正在使用 R 对天气数据进行一些分析。简而言之,我需要取每个城市的最低气温的移动平均值,但即使在我指定的宽度 = 31 滚动窗口中最多有五个 NA 时,我也需要它来执行计算。
为了进行基本的滚动平均值计算,我一直在使用 zoo 包中的 rollapply:
library("dplyr")
library("zoo")
另外,如果有人想向我展示如何为未来的问题生成一些随机样本数据,那将非常有帮助。我的数据是一个包含三列的数据框:年份(整数)、城市(字符 - 在这种情况下都是“KASLO”和 MinTemp(数字,带有一些 NA 值)。数据框的名称与“城市”相同" 列(“KASLO”)。
我一直在使用基本代码来获取移动平均线,而不受 NA 值数量的限制:
MA <- rollapply(KASLO$MinTemp, width = 31, mean, fill = NA)
KASLO <- mutate(KASLO, "Moving Average" = MA)
这是一个好的开始,但由于数据的性质,多年来存在差距。即使滚动窗口内有多达 5 个 NA 值,我也需要程序为我提供输出。因此,例如,如果 31 宽度窗口中一年有 5 个 NA,则代码将使用 26 个现有值计算移动平均值。目前,除非窗口的 NA 值为零,否则输出会给出 NA。
我尝试了以下(和其他变体),但无济于事:
MA <- rollapply(KASLO$MinTemp, width = 31, function (x) if(length(which(!is.na(x))) >= 26) { mean(x) }, fill = NA)
KASLO <- mutate(KASLO, "Moving Average" = MA)
这提供了与我没有在函数/if 语句中添加相同的输出(即仅在不存在 NA 时计算 MA)。
非常感谢您对此任务的任何帮助!
【问题讨论】:
-
欢迎来到堆栈。尝试给出一个最小的工作示例(请参阅minimal reproducible example)。在这里,据我了解,您只想给出一个带有一些连续
NAs的向量,以及一个使用较短窗口的rollapply示例(例如 10)
标签: r smoothing rolling-computation rollapply