r - 用平均值填补时间序列中的空白

标签 r time-series

我有一个像这样的数据框:

day         sum_flux  samples mean
2005-10-26     0.02     48    0.02
2005-10-27     0.12     12    0.50

这是一系列跨越 5 年的每日读数,但有些日子不见了。我想用其他年份的那个月的平均值来填充这些日子。

即如果 26-10-2005 丢失,我想使用数据集中所有十月的平均值。
如果整个 10 月都消失了,我想将此平均值应用于每个缺失的日子。

我想我需要构建一个函数(可能使用 plyr)来评估这些日子。但是,我对在 R 中使用各种时间序列对象以及有条件地对数据进行子集化非常缺乏经验,希望得到一些建议。特别是关于我应该使用哪种类型的时间序列。

非常感谢

最佳答案

一些样本数据。我假设 sum_flux是具有缺失值且要为其计算值的列。

library(lubridate)
days <- seq.POSIXt(ymd("2005-10-26"), ymd("2010-10-26"), by = "1 day")
n_days <- length(days)
readings <- data.frame(
  day      = days,
  sum_flux = runif(n_days),
  samples  = sample(100, n_days, replace = TRUE),
  mean     = runif(n_days)
)
readings$sum_flux[sample(n_days, floor(n_days / 10))] <- NA

添加月份列。
readings$month <- month(readings$day, label = TRUE)

使用 tapply得到月平均通量。
monthly_avg_flux <- with(readings, tapply(sum_flux, month, mean, na.rm = TRUE))

每当缺少通量时使用此值,否则保留通量。
readings$sum_flux2 <- with(readings, ifelse(
  is.na(sum_flux), 
  monthly_avg_flux[month], 
  sum_flux
))

关于r - 用平均值填补时间序列中的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346007/

相关文章:

r - R中的前向和后向填充数据框

regex - R 正则表达式 - 替换第 n 个匹配项

r - by() 在数据帧上应用均值函数时出错。发生了什么?

r - 重命名data.frame中的整数

r - 如何处理 R 中 for 循环中的缺失数据 (NA)

r - R 中的累积和、移动平均数和 SQL "group by"等价物

python - 按月 reshape Pandas 数据框

r - xts 子集化给出了几个月的错误结果

r - R 中的每小时时间序列。 ts(... start) 是如何工作的?

r - 在 R 中对齐多个时间序列