我的dt
中有一列Dataframe
,如下所示
dt
01-Jan-2017 12:00:00
12/01/2017 01:15:00
13-Sep-97 21:00:00
20 August 2017 22:00:00
12/19/17 01:15:00
2/4/2017 05:18:00
如何在R_dt列中获取R日期时间格式
dt R_dt
01-Jan-2017 12:00:00 2017-01-01 12:00:00
12/01/2017 01:15:00 2017-12-01 01:15:00
13-Sep-97 21:00:00 1997-09-13 21:00:00
20 August 2017 22:00:00 2017-08-20 22:00:00
12/19/17 01:15:00 2017-12-19 01:15:00
2/4/2017 05:18:00 2017-02-04 05:18:00
我尝试过使用 - strftime(mydf$date,"%d/%m/%Y")
- 这会引发错误。
答案 0 :(得分:2)
您有多种格式,需要一个自动尝试多种格式的功能。我的anytime包中的anytime()
就是这样一个功能:
R> dvec <- c("01-Jan-2017 12:00:00", "12/01/2017 01:15:00", "13-Sep-97 21:00:00",
= "20 August 2017 22:00:00", "12/19/17 01:15:00", "2/4/2017 05:18:00")
R> dvec
[1] "01-Jan-2017 12:00:00" "12/01/2017 01:15:00"
[3] "13-Sep-97 21:00:00" "20 August 2017 22:00:00"
[5] "12/19/17 01:15:00" "2/4/2017 05:18:00"
R> anytime(dvec)
[1] "2017-01-01 12:00:00 CST" "2017-12-01 01:15:00 CST"
[3] NA "2017-08-20 22:00:00 CDT"
[5] NA NA
R>
您看到三个失败:两个使用两位数的年份(格式%y
),默认情况下我们不支持 - 但我们提供了通过addFormat()
添加格式的功能所以可以解决这个问题:
R> addFormats(c("%d-%b-%y %H:%M:%S", "%m/%d/%y %H:%M:%S"))
R> anytime(dvec)
[1] "2017-01-01 12:00:00 CST" "2017-12-01 01:15:00 CST"
[3] "2097-09-13 21:00:00 CDT" "2017-08-20 22:00:00 CDT"
[5] "2017-12-19 01:15:00 CST" NA
R>
最后一个因为单个数字月份和日期而失败 - 而且我们使用的Boost代码没有对其进行解析,所以我没有(简单)修复它。
但是,由于与测试和比较相关的原因,我们现在还允许使用R的内部解析器(通过我的包RApiDatetime),以便您可以对这些进行后处理:
R> anytime(dvec[6], useR=TRUE)
[1] "2017-02-04 05:18:00 CST"
R>