You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中将失业率数据框转换为时间序列的问题求助

解决宽格式失业率数据转时间序列的问题

你遇到的问题很典型——直接用as.ts(unemployment)处理宽格式的年度+月度数据,会把每一年当成一个单独的时间点(频率=1),而每个月份变成这个时间点下的变量,自然画不出连续的月度时间序列图。下面是两种可行的解决方法,帮你把数据转换成正确的月度时间序列:

方法一:用tidyverse工具链(更直观易读)

这种方法适合习惯用dplyr/tidyr处理数据的用户,步骤清晰:

  1. 把宽格式转成长格式
    先加载tidyverse包,然后将年份以外的12个月份列合并成两列(月份名称和对应失业率):

    library(tidyverse)
    # 转换为长格式
    unemp_long <- unemployment %>%
      pivot_longer(cols = -Year,  # 保留Year列,其他列转成键值对
                   names_to = "Month",  # 月份列的列名存到Month列
                   values_to = "Unemployment")  # 失业率数值存到Unemployment列
    
  2. 生成连续的时间标识
    用lubridate包把年份和月份组合成日期,方便后续验证时间顺序:

    library(lubridate)
    unemp_long <- unemp_long %>%
      mutate(
        # 把月份缩写(Jan/Feb...)转成数字1-12
        Month_num = match(Month, month.abb),
        # 生成每个月的第一天作为日期
        Date = ymd(paste(Year, Month_num, "01", sep = "-"))
      )
    
  3. 创建月度时间序列对象
    提取失业率数值,用ts()指定起始年份和月度频率(frequency=12):

    unemp_ts <- ts(unemp_long$Unemployment, 
                   start = c(1980, 1),  # 起始点:1980年1月
                   frequency = 12)      # 月度数据,频率为12
    
  4. 绘制时间序列图
    直接调用plot()就能得到连续的月度趋势图:

    plot(unemp_ts, 
         main = "1980-2017 美国月度失业率", 
         ylab = "失业率(%)", 
         xlab = "年份")
    

方法二:Base R 原生方法(无需额外包)

如果不想加载第三方包,可以用base R的矩阵操作来处理:

  1. 提取月度数据向量
    先去掉年份列,把剩下的月度数据转成矩阵,再转置后变成按时间顺序排列的向量(1980年1月→1980年2月→...→2017年12月):

    # 提取月度数据矩阵(去掉第一列年份)
    unemp_matrix <- as.matrix(unemployment[, -1])
    # 转置矩阵后转成向量,保证时间顺序正确
    unemp_vector <- as.vector(t(unemp_matrix))
    
  2. 创建时间序列对象
    同样用ts()指定起始点和频率:

    unemp_ts <- ts(unemp_vector, 
                   start = c(1980, 1), 
                   frequency = 12)
    
  3. 绘图验证

    plot(unemp_ts, 
         main = "1980-2017 美国月度失业率", 
         ylab = "失业率(%)")
    

为什么原来的方法不行?

当你直接对宽格式数据框用as.ts()时,R会把每一行(每一年)视为一个时间点,频率设为1,而12个月份列会被当成12个独立的时间序列变量。所以你看到的输出是Start = 1 End = 38 Frequency = 1,对应1980-2017的38个年份,每个年份有12个变量,这显然不是你想要的单变量月度时间序列。

现在你可以试试上面的方法,应该能得到符合预期的时间序列图表了。

内容的提问来源于stack exchange,提问作者player play

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:42:20