将数据框转换为 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 失业中的时间序列的主要内容,如果未能解决你的问题,请参考以下文章

如何将嵌套的 txt/json 转换为 R 中的“正确”数据框

将时间 dd/mm/yyyy 转换为 R 中的数字

如何在R中的数据框中转换日期/时间列

r 将摘要统计信息转换为R中的整理数据框

将具有重复节点的 XML 转换为 R 数据框

将数据帧列表转换为R中的单个数据帧[重复]