Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 合并数据帧以创建分组的时间序列_R_Merge_Time Series - Fatal编程技术网

R 合并数据帧以创建分组的时间序列

R 合并数据帧以创建分组的时间序列,r,merge,time-series,R,Merge,Time Series,我想创建一个分组的时间序列(层次结构)。基本上每年有四个季度和12个月。年度是总计,季度是月份的小计。月是底值。我试图使用Robert Handyman(forecast)的hts库的gts:,但我遗漏了一些东西。初步演示数据如下所示 library(tidyr) 表1: ts(rnorm(67), start=c(2015, 4),frequency=12) 表2: aggregate(ts(rnorm(67), start=c(2015, 4), frequency=12), nfr

我想创建一个分组的时间序列(层次结构)。基本上每年有四个季度和12个月。年度是总计,季度是月份的小计。月是底值。我试图使用Robert Handyman(
forecast
)的
hts
库的
gts
:,但我遗漏了一些东西。初步演示数据如下所示

library(tidyr)
表1:

ts(rnorm(67),  start=c(2015, 4),frequency=12)
表2:

aggregate(ts(rnorm(67),  start=c(2015, 4), frequency=12), nfrequency=4)

任何建议如何创建一个列作为一年的总计,然后按季度汇总,并表示月份。这基本上意味着,数据集上存在年-季度-月的层次结构。

如果您不坚持使用
ts()
格式,您可以将其放入数据集中,并使用
zoo
lubridate
dplyr
中的函数来生成所需的输出

library(dplyr)
library(zoo)
library(tibble)
library(lubridate)
x <- ts(rnorm(67),  start=c(2015, 4),frequency=12)
dat <- tibble(
  # change time of the ts object into year-month 
  # and extract just the month 
  m = month(as.yearmon(time(x))), 
  # change time of the ts object to year-month
  # and extract the year
  year = year(as.yearmon(time(x))), 
  # change time of the ts object to year-month
  # and extract the quarter
  qtr = quarter(as.yearmon(time(x))),
  value = as.vector(x)) %>% 
  # group data by year and quarter
  group_by(year, qtr) %>% 
  # get the sum of value for each year-quarter.
  mutate(qtr_sum = sum(value)) %>% 
  # ungroup the data and then group again just by year
  ungroup() %>% 
  group_by(year) %>% 
  # calculate the yearly sum 
  mutate(yr_sum = sum(value))

dat
# # A tibble: 67 x 6
# # Groups:   year [6]
#     m   year   qtr   value qtr_sum yr_sum
#   <dbl> <dbl> <int>   <dbl>   <dbl>  <dbl>
# 1     4  2015     2  0.555  -1.68   -0.851
# 2     5  2015     2 -0.767  -1.68   -0.851
# 3     6  2015     2 -1.47   -1.68   -0.851
# 4     7  2015     3 -1.75   -0.0733 -0.851
# 5     8  2015     3  1.26   -0.0733 -0.851
# 6     9  2015     3  0.408  -0.0733 -0.851
# 7    10  2015     4 -0.0731  0.905  -0.851
# 8    11  2015     4  0.824   0.905  -0.851
# 9    12  2015     4  0.154   0.905  -0.851
# 10     1  2016     1 -0.231  -0.634   2.70 
# # … with 57 more rows

库(dplyr)
图书馆(动物园)
图书馆(tibble)
图书馆(lubridate)
x%
#获取每个年度和季度的价值总和。
突变(qtr_sum=sum(值))%>%
#将数据解组,然后仅按年份再次分组
解组()%>%
组别(年份)%>%
#计算年度金额
变异(yr_sum=总和(值))
dat
##A tibble:67 x 6
##组别:年份[6]
#m年qtr值qtr_和yr_和
#             
# 1     4  2015     2  0.555  -1.68   -0.851
# 2     5  2015     2 -0.767  -1.68   -0.851
# 3     6  2015     2 -1.47   -1.68   -0.851
# 4     7  2015     3 -1.75   -0.0733 -0.851
# 5     8  2015     3  1.26   -0.0733 -0.851
# 6     9  2015     3  0.408  -0.0733 -0.851
# 7    10  2015     4 -0.0731  0.905  -0.851
# 8    11  2015     4  0.824   0.905  -0.851
# 9    12  2015     4  0.154   0.905  -0.851
# 10     1  2016     1 -0.231  -0.634   2.70 
##…还有57行

谢谢DaveArmstrong,但这个问题需要时间序列的层次结构。有什么想法吗?@lpt我不确定。从我的阅读来看,
hts()
gts()
函数意味着层次结构是时间以外的东西-就像一个整体,分解成不同组的部分(比如男性和女性)。在这个框架下,我不清楚你将如何处理你所说的分组。是的,通常你是正确的。然而,季度是月的组合,