我有一个像这样的数据帧:
day sum_flux samples mean
2005-10-26 0.02 48 0.02
2005-10-27 0.12 12 0.50
Run Code Online (Sandbox Code Playgroud)
这是一系列5年的日常阅读,但有些日子不见了.我想用其他年份的平均月份来填补这些日子.
即如果缺少26-10-2005我想要使用数据集中所有Octobers的平均值.如果整个十月都不见了,我想把这个平均值应用到每个缺失的一天.
我想我需要构建一个函数(可能使用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
Run Code Online (Sandbox Code Playgroud)
添加月份列.
readings$month <- month(readings$day, label = TRUE)
Run Code Online (Sandbox Code Playgroud)
使用tapply得到的月平均流量.
monthly_avg_flux <- with(readings, tapply(sum_flux, month, mean, na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
每当缺少助焊剂时使用此值,或者如果没有则保持助焊剂.
readings$sum_flux2 <- with(readings, ifelse(
is.na(sum_flux),
monthly_avg_flux[month],
sum_flux
))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2108 次 |
| 最近记录: |