为什么我在 R 中得到这个月度时间序列数据的频率为 1?
Why am I getting a frequency of 1 for this monthly time series data in R?
我正在使用 R 进行时间序列分析,我有以下 csv
文件已加载到 R
:
CSV file:
我已经使用 zoo
包将我的数据框转换为 ts
对象:
library(zoo)
df1_ts <- as.ts(read.zoo(df1, FUN = as.yearmon))
运行:
class(df1_ts)
# [1] "mts" "ts" "matrix"`
但是当我 运行 head(df1_ts)
时,我得到以下结果:
head(df1_ts)
# Time Series:
# Start = 2014
# End = 2018
# Frequency = 1
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 2014 4621 3569 4249 4593 3320 1970 2483 3474 4302 5670 5788 5570
# 2015 5747 4346 5176 5362 5360 3707 3883 5138 5568 6034 5989 5648
# 2016 5821 5164 5781 5346 5339 4743 5417 5514 5880 5899 6014 5641
# 2017 5980 5341 5890 5596 5753 5470 5589 5545 5749 5938 5864 5567
# 2018 5655 5392 5766 5268 5680 5337 5197 5714 5802 5935 5955 5637
为什么我得到 Frequency
=1?我希望 Frequency
为 12,因为这些是月度数据?
我该如何解决这个问题?
我尝试了以下方法,但没有成功:
df1_ts <- as.ts(read.zoo(df1, FUN = as.yearmon), freq=12)
问题中显示的代码正在创建一个由 12 个序列(每个月列一个)组成的多元时间序列,其时间索引为年份;然而,我们需要的是一个单一的单变量月度系列。
使用最后在注释中重复显示的 df1
,首先使用转置将 data.frame df1
转换为矩阵,然后逐列将转置后的矩阵分解为单个矩阵向量使用 c
。现在我们可以直接定义ts
系列:
tt <- ts(c(t(df1[-1])), start = df1$Year[1], freq = 12)
给予:
frequency(tt)
## [1] 12
tt
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2014 1 2 3 4 5 6 7 8 9 10 11 12
## 2015 13 14 15 16 17 18 19 20 21 22 23 24
## 2016 25 26 27 28 29 30 31 32 33 34 35 36
## 2017 37 38 39 40 41 42 43 44 45 46 47 48
## 2018 49 50 51 52 53 54 55 56 57 58 59 60
备注
请不要使用图像来显示您输入的数据,因为这意味着任何想要回答的人都需要重新输入。将其作为 R 代码可重现地提供。这次我已经为你做了这件事,更改数据以避免输入所有这些数字。
df1 <- as.data.frame(cbind(2014:2018, matrix(1:60, ncol = 12, byrow = TRUE)))
names(df1) <- c("Year", month.abb)
我正在使用 R 进行时间序列分析,我有以下 csv
文件已加载到 R
:
CSV file:
我已经使用 zoo
包将我的数据框转换为 ts
对象:
library(zoo)
df1_ts <- as.ts(read.zoo(df1, FUN = as.yearmon))
运行:
class(df1_ts)
# [1] "mts" "ts" "matrix"`
但是当我 运行 head(df1_ts)
时,我得到以下结果:
head(df1_ts)
# Time Series:
# Start = 2014
# End = 2018
# Frequency = 1
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 2014 4621 3569 4249 4593 3320 1970 2483 3474 4302 5670 5788 5570
# 2015 5747 4346 5176 5362 5360 3707 3883 5138 5568 6034 5989 5648
# 2016 5821 5164 5781 5346 5339 4743 5417 5514 5880 5899 6014 5641
# 2017 5980 5341 5890 5596 5753 5470 5589 5545 5749 5938 5864 5567
# 2018 5655 5392 5766 5268 5680 5337 5197 5714 5802 5935 5955 5637
为什么我得到 Frequency
=1?我希望 Frequency
为 12,因为这些是月度数据?
我该如何解决这个问题?
我尝试了以下方法,但没有成功:
df1_ts <- as.ts(read.zoo(df1, FUN = as.yearmon), freq=12)
问题中显示的代码正在创建一个由 12 个序列(每个月列一个)组成的多元时间序列,其时间索引为年份;然而,我们需要的是一个单一的单变量月度系列。
使用最后在注释中重复显示的 df1
,首先使用转置将 data.frame df1
转换为矩阵,然后逐列将转置后的矩阵分解为单个矩阵向量使用 c
。现在我们可以直接定义ts
系列:
tt <- ts(c(t(df1[-1])), start = df1$Year[1], freq = 12)
给予:
frequency(tt)
## [1] 12
tt
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2014 1 2 3 4 5 6 7 8 9 10 11 12
## 2015 13 14 15 16 17 18 19 20 21 22 23 24
## 2016 25 26 27 28 29 30 31 32 33 34 35 36
## 2017 37 38 39 40 41 42 43 44 45 46 47 48
## 2018 49 50 51 52 53 54 55 56 57 58 59 60
备注
请不要使用图像来显示您输入的数据,因为这意味着任何想要回答的人都需要重新输入。将其作为 R 代码可重现地提供。这次我已经为你做了这件事,更改数据以避免输入所有这些数字。
df1 <- as.data.frame(cbind(2014:2018, matrix(1:60, ncol = 12, byrow = TRUE)))
names(df1) <- c("Year", month.abb)