• R语言
  • 【求助】時間格式轉換

大家好,目前有月資料

Time,Mkt_RF,SMB,HML,RF
192607,2.96,-2.3,-2.87,0.22
192608,2.64,-1.4,4.19,0.25
192609,0.36,-1.32,0.01,0.23
192610,-3.24,0.04,0.51,0.32
192611,2.53,-0.2,-0.35,0.31

因為想對日期作篩選出192608192610的資料,所以用as.Dateas.POSIXct去轉換,可是卻發現轉出來的都是NA

自己測試了一下發現這兩個指令好像都只能轉換有%d的日期,而且%y%m%d中間一定要有-連接

> as.Date("192702",format="%Y-%m")
[1] NA
> as.Date("19270211",format="%Y-%m-%d")
[1] NA
> as.Date("1927-02-11",format="%Y-%m-%d")
[1] "1927-02-11"
> as.POSIXct("1927-02-11",format="%Y-%m-%d")
[1] "1927-02-11 CST"
> as.POSIXct("1927-02",format="%Y-%m")
[1] NA
> as.POSIXct("192702",format="%Y-%m")
[1] NA

如果真的是這樣的話,目前資料沒有到%d,中間也沒有-連接,該如何轉換才好?

    rockon8765

    没有斜杠的话就不用加斜杠:

    as.Date('20201025', "%Y%m%d")
    #>  [1] "2020-10-25"

    只有月没有日的话可以使用zoo::as.yearmon()

    library(zoo)
    as.yearmon('192702', "%Y%m")
    #>  [1] "2月 1927"

    还有折中的方法就是把所有月份都加个1号的日期:

    as.Date(paste0('192702', '01'), format='%Y%m%d')
    #>  [1] "1927-02-01"

    或者用极乐净土lubridate包:

    library(lubridate)
    parse_date_time('192702', 'ym')
    #>  [1] "1927-02-01 UTC"