将数据框转换为R失业的时间序列

时间:2018-04-02 20:10:55

标签: r time-series

我从劳工统计局下载了1980 - 2017年的失业数据。我将文件上传到R并尝试将其转换为as.ts(失业)的时间序列,但我没有得到合适的图表。我有13列,第1列代表1980年至2017年的年份值,其他12列代表失业的月份和值。例如:

as.ts(失业)

时间序列:

开始= 1

结束= 38

频率= 1

年1月2月3月4月5月6月7月8月9月

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月因空间受到压制

2 个答案:

答案 0 :(得分:0)

请注意,数据框中的列表示具有不同含义的不同内容(混合变量和观察)。例如,第一列是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)

答案 1 :(得分:0)

您可以使用tidyverse使用tidyr::gather()方式,也可以将数据框强制转换为矩阵,然后再转换为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)

ts