gpt4 book ai didi

r - 使用月度数据计算 n 年时间序列的季节性平均值

转载 作者:行者123 更新时间:2023-12-04 11:18:09 28 4
gpt4 key购买 nike

我有一个包含 3 列(月、年、值)的数据框 df。

>head(df)
months year value
January 01 23875.00
February 01 15343.25
March 01 9584.25
April 01 19026.33
May 01 26324.00
June 01 31228.00

每 12 行(从一月的第一天开始),年份依次为 02、03、04 等,直到 16。我需要计算季节性均值,即夏季平均值(十二月、一月、二月);秋季平均值为(三月、四月、五月),冬季平均值为(六月、七月、八月), Spring 平均值为(九月、十月、十一月)。

然后用季节、年份和它们的平均值制作一个新的数据框,得到这样的东西。

>head(seasdf)
season year value
DJF 01
MAM 01
JJA 01
SON 01
DJF 02
MAM 02

一直到 16 岁。我用这种数据框搜索了类似的问题,但找不到解决方法。

抱歉这个菜鸟问题。

最佳答案

我们假设同一季度的相邻月份都应具有相同的季度名称和年份,并且季度以季度结束的年份命名。例如,2001 年 12 月、2002 年 1 月和 2002 年 2 月都是 DJF 2002 季度的一部分。

首先将年份和月份转换为 “yearmon” 类变量 ym,然后加上 1/12 将月份向前推一。这是基于这样一个事实,即 yearmon 变量存储为 year + 0 表示 1 月,1/12 表示 2 月,2/12 表示 3 月,等等。然后将其转换为 "yearqtr" 类变量, yq。现在按 yq 聚合 value,注意 yearqtr 变量排序正确,因此 2001 Q1 将在 2001 Q2 之前出现,等等。最后用问题中显示的列重建聚合数据框.

library(zoo)  # yearmon and yearqtr classes

ym <- as.yearmon(paste(DF$months, DF$year), "%B %y")
yq <- as.yearqtr(ym + 1/12)

Ag <- aggregate(value ~ yq, DF, mean)

season.name <- c("DJF", "MAM", "JJA", "SON")
with(Ag, data.frame(year = as.integer(yq), season = season.name[cycle(yq)], value))

给予:

  year season    value
1 2001 DJF 19609.12
2 2001 MAM 18311.53
3 2001 JJA 31228.00

如果问题中显示的确切布局不重要,那么我们可以省略上面的最后两行代码,只使用 Ag

> Ag
yq value
1 2001 Q1 19609.12
2 2001 Q2 18311.53
3 2001 Q3 31228.00

注意:假设可重现形式的输入DF是:

DF <- structure(list(months = c("January", "February", "March", "April", 
"May", "June"), year = c("01", "01", "01", "01", "01", "01"),
value = c(23875, 15343.25, 9584.25, 19026.33, 26324, 31228
)), .Names = c("months", "year", "value"), class = "data.frame", row.names = c(NA, -6L))

关于r - 使用月度数据计算 n 年时间序列的季节性平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41234275/

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