【问题标题】:Fixing date format in R在 R 中修复日期格式
【发布时间】:2017-08-24 21:02:42
【问题描述】:

我在 R 中有三个数据表。每个数据表都有一个日期列。这些表是vix_data,gold_ohlc_data,btc_ohlc_data。它们的格式如下:

head(vix_data$Date)
[1] 1/2/04 1/5/04 1/6/04 1/7/04 1/8/04 1/9/04
3435 Levels: 1/10/05 1/10/06 1/10/07 1/10/08 1/10/11 ... 9/9/16

head(gold_ohlc_data$date)
[1] 8/23/17 8/22/17 8/21/17 8/18/17 8/17/17 8/16/17
2519 Levels: 1/10/08 1/10/11 1/10/12 1/10/13 1/10/14 ... 9/9/16

head(btc_ohlc_data$Date)
[1] "2017-08-23" "2017-08-22" "2017-08-21" "2017-08-20" "2017-08-19"
[6] "2017-08-18"

如何更改vix_datagold_ohlc_data 表中的日期列以匹配btc_ohlc_data 格式?我尝试了几种方法,例如使用as.Date 来转换每一列——但这通常会弄乱值并插入很多 N/A

【问题讨论】:

  • vix_data$Date中,哪一个是日,哪一个是月?

标签: r date format


【解决方案1】:

一个选项是使用包lubridate 中的函数。用户需要知道哪一个是日,哪一个是月才能选择合适的函数来使用,例如dmymdy

# Load package
library(lubridate)

# Create example string
date1 <- c("1/2/04", "1/5/04", "1/6/04", "1/7/04", "1/8/04", "1/9/04")
date2 <- c("8/23/17", "8/22/17", "8/21/17", "8/18/17", "8/17/17", "8/16/17")

# Convert to date class
dmy(date1)
# [1] "2004-02-01" "2004-05-01" "2004-06-01" "2004-07-01" "2004-08-01" "2004-09-01"
mdy(date1)
# [1] "2004-01-02" "2004-01-05" "2004-01-06" "2004-01-07" "2004-01-08" "2004-01-09"
mdy(date2)
# [1] "2017-08-23" "2017-08-22" "2017-08-21" "2017-08-18" "2017-08-17" "2017-08-16"

【讨论】:

    【解决方案2】:

    查看包裹lubridatelubridate::dmy()ymd() 应该可以很好地处理这个问题。

    【讨论】:

      【解决方案3】:

      看起来您的数据是作为因子读入的,所以首先您必须将它们更改为字符。然后可以将其转换为日期并指定输入格式,其中%m 代表数字月份,%d 代表日期,%y 代表两位数字年份。

      x <- c('1/2/04', '1/5/04', '1/6/04', '1/7/04', '1/8/04', '1/9/04')
      y <- as.Date(x, format = "%m/%d/%y")
      y
      [1] "2004-01-02" "2004-01-05" "2004-01-06" "2004-01-07" "2004-01-08"
      [6] "2004-01-09"
      

      【讨论】:

        【解决方案4】:

        您确定您指定的as.Date 正确吗?例如,你有%y,而不是%Y

        我做了以下事情并且成功了:

        > vix <- c("1/2/04", "1/5/04", "1/6/04", "1/7/04", "1/8/04", "1/9/04")
        > vix<- as.factor(vix)
        > vix
        [1] 1/2/04 1/5/04 1/6/04 1/7/04 1/8/04 1/9/04
        Levels: 1/2/04 1/5/04 1/6/04 1/7/04 1/8/04 1/9/04
        > as.Date(vix, "%m/%d/%y")
        [1] "2004-01-02" "2004-01-05" "2004-01-06" "2004-01-07" "2004-01-08" "2004-01-09"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-06
          • 2019-06-09
          • 1970-01-01
          • 1970-01-01
          • 2021-04-06
          • 2014-03-21
          • 1970-01-01
          相关资源
          最近更新 更多