【问题标题】:Set standard format for Date [duplicate]为日期设置标准格式[重复]
【发布时间】:2016-04-13 23:47:02
【问题描述】:

我有桌子,

>dt
ID     Date
001   13-Jan-2016
002   2016-01-10
003   15-Jan-2016
004   2016-01-09
005   2016-01-11

而且,我想把我的桌子变成这样

>dt
    ID     Date
    004   09-Jan-2016
    002   10-Jan-2016
    005   11-Jan-2016
    001   13-Jan-2016
    003   15-Jan-2016

我想为 Date 变量设置默认值并使其排序。我该怎么办? 谢谢。

【问题讨论】:

  • 签出lubridate包,它提供了各种标准化日期的方法

标签: r date standards


【解决方案1】:

如果您正好有您显示的两种格式,您可以使用grepl 查找字母,并使用ifelse 根据结果传递as.Date 不同的格式:

as.Date(dt$Date, ifelse(grepl('[a-z]', dt$Date), '%d-%b-%Y', '%Y-%m-%d'))
# [1] "2016-01-13" "2016-01-10" "2016-01-15" "2016-01-09" "2016-01-11"

如果覆盖dt$Date,可以使用order进行排序:

dt$Date <- as.Date(dt$Date, ifelse(grepl('[a-z]', dt$Date), '%d-%b-%Y', '%Y-%m-%d'))
dt[order(dt$Date),]

#    ID       Date
# 4 004 2016-01-09
# 2 002 2016-01-10
# 5 005 2016-01-11
# 1 001 2016-01-13
# 3 003 2016-01-15

【讨论】:

  • 这么长时间以来,我没有意识到您可以将格式向量指定为as.Date()。我想你每天都会学到一些东西。
  • @alistaire - 矢量回收 - 它正在尝试针对c('%d-%b-%Y', '%F')[c(1,2,1,2,1)]进行格式化
  • @alistaire 谢谢,这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多