我正在处理每日数据:

 > 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天!没有leap年! **

如果可能的话,我想直接获取每个月的平均值(即步骤2)。

最佳答案

这是一种使用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。)

关于r - 汇总函数-计算每个月方差的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29667445/

10-10 13:32