gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:45:56 24 4
gpt4 key购买 nike

我正在处理日常数据:

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

最佳答案

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com