将数据框转换为 R 失业中的时间序列
Posted
技术标签:
【中文标题】将数据框转换为 R 失业中的时间序列【英文标题】:converting data frame to time series in R unemployment 【发布时间】:2018-09-12 01:46:39 【问题描述】:我从劳工统计局下载了 1980-2017 年的失业数据。我将文件上传到 R 并尝试使用 as.ts(unemployment) 将其转换为时间序列,但我没有得到合适的图表。我有 13 列,第一列代表 1980-2017 年的年份,其他 12 列代表月份和失业值。例如:
as.ts(失业)
时间序列:
开始 = 1
结束 = 38
频率 = 1
年份 1 月 2 月 3 月 4 月 5 月 6 月 7 月 8 月 9 月 10 月
1 1980 6.3 6.3 6.3 6.9 7.5 7.6 7.8 7.7 7.5 7.5
2 1981 7.5 7.4 7.4 7.2 7.5 7.5 7.2 7.4 7.6 7.9
3 1982 8.6 8.9 9.0 9.3 9.4 9.6 9.8 9.8 10.1 10.4
11 月和 12 月因空间原因被压制
【问题讨论】:
请考虑一些代码示例和您当前获得的输出。谢谢 【参考方案1】:您可以使用tidyr::gather()
采用tidyverse
方式,也可以将数据框强制转换为矩阵,然后再将其转换为ts
对象。
我会让其他人详细说明如何融合数据框,这是第二种基本 R 方法的建议。
您的数据:
set.seed(12)
dfm <- matrix(round(rnorm(38*12), digits = 2),
nrow = 38, ncol = 12)
colnames(dfm) <- month.abb
df<- data.frame(Year=seq(1980, 2017), dfm)
首先我建议你删除 Year
变量并将其放入行名中:
rownames(df)<-df$Year
df$Year <- NULL
#head(df)
然后您可以将数据框强制转换为矩阵。注意矩阵的方向 - 在将其解释为向量之前,您必须对其进行转置。
df_ts <- ts(as.vector(t(as.matrix(df))),
start=c(1980,1), end=c(2017,12), frequency=12)
现在您有了可以绘制的 ts
对象:
plot(df_ts)
【讨论】:
【参考方案2】:请注意,数据框中的列代表具有不同含义的不同事物(混合变量和观察值)。例如第一列是year
,而其他列是months
。因此,您必须首先 tidy
您的数据框。使用上面的示例数据:
library(tidyr)
library(dplyr)
df_ts <- df %>%
gather(key=Month, value=Value, -Year) %>%
mutate(Month=factor(Month, levels = c("Jan", "Feb", "Mar",
"Apr", "May", "Jun",
"Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"))) %>%
arrange(Year, Month) %>%
pull(Value) %>%
as.ts(start=c(1980,1), end=c(2017,12), frequency=12)
【讨论】:
以上是关于将数据框转换为 R 失业中的时间序列的主要内容,如果未能解决你的问题,请参考以下文章