聚合函数 - 计算每个月的差异的平均值

3

我正在处理每日数据:

 > head(data)
    date       X
 01-01-1950   100
 01-02-1950   200
     .         .
 01-01-2015   150

我正在使用的软件包有:TSAggplot2lubridatextszoo

我想根据以下公式计算每个月的方差:

 myvar <- function(Month){
   for (j in 1:(days_in_month(Month)-1)){
     suma = (X[j+1]-X[j])**2 }
   sig = (1/days_in_month(Month))*suma
   return(sig)
 }

这将输出以下内容:
 > myvar(1)
        Jan 
 0.09322581

现在我希望对这个进行聚合,以计算每个月方差的均值。我考虑了以下方法,但不知道如何在这里使用聚合函数:
 data$Month <- month(data$date,label=TRUE)
 data$Year <- format(data$date,format="%Y")
 aggregate( X ~ Month + Year , data , myvar )

期望结果:

第一步:

 Month  Year   Variance
 Jan    1950   myvar(Jan)
 Feb    1950   myvar(Jan)
  .       .         .
 Dec    2014   myvar(Jan)
 Jan    2015   myvar(Jan)

第二步:
aggregate( X ~ Month , data , mean )

 Month  Variance
 Jan    myvar(Jan)
  .        .
 Dec    myvar(Jan)

二月永远只有28天!没有闰年!

如果可能的话,我希望直接得到每个月平均值的平均值(即步骤2)。


是的,它不起作用。但是它在日期上运行,所以days_in_month(data$date[1]) = 31。 - Oniropolo
1个回答

1

这里提供一种使用 dplyr 包执行您概述步骤的方法:

library(dplyr)
data %>%
  mutate(date = mdy(date), month = month(date), year = year(date)) %>%
  group_by(month, year) %>%
  summarise(variance = var(X)) %>%
  group_by(month) %>%
  summarise(meanVariance = mean(variance))

Result:

Source: local data frame [1 x 2]

  month meanVariance
1     1         3725

使用的数据:

data <- read.table(header = TRUE, text = "    date       X
 01-01-1950   100
 01-02-1950   200
 01-01-2015   150
 01-02-2015   220")

我在你的样本数据集中添加了一行,这样方差函数就不会返回 NA 来表示2015年1月的值了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接