计算包含原始序列(R中)中未找到的日期的日均值时间序列的更有效方法?

计算包含原始序列(R中)中未找到的日期的日均值时间序列的更有效方法?,r,datetime,aggregate-functions,time-series,R,Datetime,Aggregate Functions,Time Series,我想知道是否有一个函数/包(包:zoo?)可以让我计算第二系列值的时间序列的每日(或其他)平均值。上有几个问题涉及到创建,例如日常手段,但没有一个问题允许通过独立系列进行分组 到目前为止,我已经分两个以上的步骤完成了这项工作,首先通过aggregate函数计算方法,然后将匹配到完整的值序列。以下示例是我的典型情况,其中有些日子不包含任何值: set.seed(1) n <- 500 x <- cumsum(runif(n, min=99360*0.1, max=99360*2)) d

我想知道是否有一个函数/包(包:
zoo
?)可以让我计算第二系列值的时间序列的每日(或其他)平均值。上有几个问题涉及到创建,例如日常手段,但没有一个问题允许通过独立系列进行分组

到目前为止,我已经分两个以上的步骤完成了这项工作,首先通过
aggregate
函数计算方法,然后将
匹配到完整的值序列。以下示例是我的典型情况,其中有些日子不包含任何值:

set.seed(1)
n <- 500
x <- cumsum(runif(n, min=99360*0.1, max=99360*2))
datetime <- as.POSIXlt(x, origin="2000-01-01", tz="GMT")
y <- cumsum(runif(n, min=-1, max=1))
df <- data.frame(datetime, y)
df <- df[-sample(n, n*0.2),] #remove 20%
plot(y ~ datetime, df, t="l")

#calculate daily means
df$date <- as.Date(df$datetime)
daymean <- aggregate(y ~ date, data=df, mean)

#create daily means ts including all possible dates
date.ran <- range(df$date)
df2 <- data.frame(date=seq(date.ran[1], date.ran[2], by="days"), y=NaN)
MATCH <- match(daymean$date, df2$date)
df2$y[MATCH] <- daymean$y

plot(y ~ datetime, df, cex=0.5, pch=20)
lines(as.POSIXlt(df2$date), df2$y, t="o", col=rgb(1,0,0,0.5))
legend("topright", legend=c("Orig.", "daily mean"), col=c(1,rgb(1,0,0,0.5)), lty=c(NA, 1), pch=c(20, 1))
set.seed(1)
n
set.seed(1)
n1)动物园这里是如何使用动物园的<代码>z2
,最终结果是一系列平均值,每天一个。我们将
df
的第1列和第2列读入zoo对象z,并创建一个网格
g
,这是一个零宽度的日期zoo对象。然后计算平均值,
m
,并合并平均值和网格

library(zoo)
z <- read.zoo(df[1:2], FUN = identity)

m <- aggregate(z, as.Date, mean)
g <- zoo(, seq(start(m), end(m), by = "day"))
z2 <- merge(m, g, fill = NaN)
修订。新的理解是,我们希望创建一个类似
df2
的对象。增加了magrittr方法。
一些小改进。

我希望在我的
df2
对象中维护完整的时间序列的原因是我希望稍后在不同的时间序列之间执行一些关联,并且这些不同的时间序列并不总是具有一致的值。因此,能够比较相似的日期是至关重要的。
library(zoo)
z <- read.zoo(df[1:2], FUN = identity)

m <- aggregate(z, as.Date, mean)
g <- zoo(, seq(start(m), end(m), by = "day"))
z2 <- merge(m, g, fill = NaN)
library(zoo)
library(magrittr)

df[1:2] %>%
    read.zoo(FUN = identity) %>%
    aggregate(as.Date, mean) %>%
    function(x) merge(x, zoo(, seq(start(x), end(x), by = "day")), fill = NaN)