【问题标题】:converting data frame to time series in R unemployment将数据框转换为 R 失业中的时间序列
【发布时间】: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 月因空间原因被压制

【问题讨论】:

  • 请考虑一些代码示例和您当前获得的输出。谢谢

标签: r time-series


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      相关资源
      最近更新 更多