【问题标题】:I want to convert tbl_df to ts for time series analysis. I have done it but lost my (Month) column which is date in my data我想将 tbl_df 转换为 ts 进行时间序列分析。我已经完成了,但丢失了我的(月)列,这是我数据中的日期
【发布时间】:2020-02-23 03:50:37
【问题描述】:

我正在尝试将我的数据集 tbl_df 转换为时间序列 (ts) 以执行预测 ARIMA 模型。 这些是我原始数据集的前 5 行;

   Month      count
   <date>     <int>
 1 2016-01-01   431
 2 2016-02-01   478
 3 2016-03-01   468
 4 2016-04-01   488
 5 2016-05-01   445

成功转换后,我丢失了月份列并得到了一个奇怪的日期。 我用下面的代码转换成ts;

 crime_monthly1 <- as.ts(crime_monthly)

我得到了这个,月份 col 变成了奇怪的数字;

   Month count
 1 16801   431
 2 16832   478
 3 16861   468
 4 16892   488
 5 16922   445

我已应用此代码将日期和整个数据集转换为 ts,但无济于事;

crime_monthly1$Month <- as.Date(crime_monthly1$Month, format = "%m/%d/%Y")
ts(crime_monthly1[,-1], start = as.Date(crime_monthly1$Month[1]), frequency = 1)

我收到以下错误;

Error in crime_monthly1$Month : $ operator is invalid for atomic vectors

另一个问题是我得到 频率只有 1。虽然我的数据集每月有 36 个月的时间分辨率,但我认为应该是 12,因为 1 年有 12 个月。

谁能告诉我这样做的完整程序。真的很抱歉,但我是 R 新手,我也搜索了以前的问题,但在我的情况下找不到确切的解决方案。

【问题讨论】:

    标签: r time-series rstudio gis


    【解决方案1】:

    最简单的方法是这样。

    crime_ts <- ts(crime_monthly$count, start=2016, frequency=12)
    

    但您可能会发现使用tsibble 对象比使用ts 对象更好。

    library(tidyverse)
    library(tsibble)
    
    crime_monthly <- tribble(
        ~Month,      ~count,
        "2016-01-01",  431,
        "2016-02-01",  478,
        "2016-03-01",  468,
        "2016-04-01",  488,
        "2016-05-01",  445) %>%
      mutate(Month = as.Date(Month))
    
    crime_tsibble <- as_tsibble(crime_monthly, index=Month) %>%
      mutate(
        Month = yearmonth(Month)
      )
    crime_tsibble
    #> # A tsibble: 5 x 2 [1M]
    #>      Month count
    #>      <mth> <dbl>
    #> 1 2016 Jan   431
    #> 2 2016 Feb   478
    #> 3 2016 Mar   468
    #> 4 2016 Apr   488
    #> 5 2016 May   445
    

    reprex package (v0.3.0) 于 2020 年 2 月 23 日创建

    使用 tsibble 对象的工具位于 tsibblefeastsfable 包中。

    【讨论】:

    • 非常感谢亲爱的 Rob 先生。正如你所展示的那样,它对我完全有效。万分感谢
    【解决方案2】:

    假设输入在最后的注释中可重复显示,使用代表年/月的yearmon 索引类将其转换为动物园对象z。然后as.ts 会将其转换为具有正确频率的ts 类。

    library(zoo)
    
    z <- read.zoo(DF, FUN = as.yearmon)
    tt <- as.ts(z)
    
    tt
    ##      Jan Feb Mar Apr May
    ## 2016 431 478 468 488 445
    
    frequency(tt)
    ## [1] 12
    
    class(tt)
    ## [1] "ts"
    

    注意

    假设可重现形式的输入为:

    Lines <- "   Month      count
     1 2016-01-01   431
     2 2016-02-01   478
     3 2016-03-01   468
     4 2016-04-01   488
     5 2016-05-01   445"
    DF <- read.table(text = Lines)
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2018-04-11
      • 2021-05-21
      • 2017-06-04
      • 2021-03-08
      • 2020-12-29
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多