我有一个像这样的数据框:
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/