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

时间:2015-04-16 06:56:01

标签: r datetime aggregate

我正在处理每日数据:

 > 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)

** 2月总有28天!没有闰年! **

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

1 个答案:

答案 0 :(得分: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))

<强>结果:

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")

(我在您的示例数据集中添加了另一行,以便2015年1月的方差函数不会返回NA。)