我正在处理每日数据:
> head(data)
date X
01-01-1950 100
01-02-1950 200
. .
01-01-2015 150
我正在使用的软件包:
TSA
,ggplot2
,lubridate
,xts
,zoo
我想根据此公式计算每个月的差异:
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/