我正在处理每日数据:
> 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天!没有闰年! **
如果可能的话,我想直接得到每个月的平均值(即第2步)。
答案 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
。)