【问题标题】:lm and time series formats - is conversion necessary?lm 和时间序列格式 - 是否需要转换?
【发布时间】:2015-03-21 19:24:20
【问题描述】:

我想要几列的斜率,如下所示:

date    time
7/8/2014    23.4917166
7/9/2014    28.69671107
7/10/2014   27.3262166
7/11/2014   30.25426663
7/12/2014   29.8345944
7/13/2014   27.7473055
7/14/2014   29.8657722
7/15/2014   29.2622055

问题是,lm() 似乎无法使用 mm/dd/yyyy 格式的日期。如果我像这样将日期数据设为数字:

date    time
1   23.4917166
2   28.69671107
3   27.3262166
4   30.25426663
5   29.8345944
6   27.7473055
7   29.8657722
8   29.2622055

然后运行类似的东西

timetest <- read.table("clipboard", sep="\t", header=T)
test <- lm(time ~ date, data=timetest)
coefficients(test)[2]

我明白了:

    date 
0.5605038 

那么我应该如何将 mm/dd/yyyy 日期格式转换为数字格式?有没有将它们转换为 unix 时间的函数?

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您首先将日期字段转换为指定所用格式的日期 (MM/DD/YYYY eq %m/%d/%Y),则 lm 会为您进行转换:

    timetest$new_date <- as.Date(timetest$date, format = "%m/%d/%Y")
    

    所以,回归看起来像

    test <- lm(time ~ new_date, data = timetest)
    coefficients(test)[2]
    

    并给予

    as.numeric(new_date) 
               0.5605038
    

    请注意,as.numeric 会将日期转换为自 1970-01-01 以来的天数

    as.numeric(timetest$new_date[1])
    [1] 16259
    

    difftime(timetest$new_date[1], as.Date("1970-01-01"))
    Time difference of 16259 days
    

    您还可以使用predict 以原始字段的格式获取日期的新值

    predict(test, data.frame(new_date = 
      seq.Date(as.Date("7/16/2014", format = "%m/%d/%Y"),
        as.Date("7/20/2014", format = "%m/%d/%Y"), by = 1)))
    

    返回

           1        2        3        4        5 
    30.83212 31.39262 31.95312 32.51363 33.07413 
    

    【讨论】:

      【解决方案2】:

      由于某种原因 as.POSIXct() 不起作用,所以我选择了:

      timetest <- read.table("clipboard", sep="\t", header=T)
      
      timetest$date <- as.numeric(as.Date(timetest$date, "%m/%d/%Y"))
      
      test <- lm(time ~ date, data=timetest)
      coefficients(test)[2]
      

      新的第二行只是用数值覆盖原始 m/d/y 数据。此过程不需要 Unix 时间。

      【讨论】:

        【解决方案3】:

        如果要将日期转换为 Unix 时间,可以使用类似

        unix_time<-as.numeric(as.POSIXct(date, format="%m/%d/%Y"))
        

        但是这些值会以很多零结尾,所以我不确定它们在回归中会有多大用处。

        【讨论】:

          猜你喜欢
          • 2012-02-13
          • 2016-08-03
          • 1970-01-01
          • 1970-01-01
          • 2020-12-29
          • 2018-06-09
          • 1970-01-01
          • 1970-01-01
          • 2010-09-30
          相关资源
          最近更新 更多