首页 > 解决方案 > 转换日期时间字符串并按日期排序

问题描述

我有一个非常重要的问题,即在 R 中将表示日期时间的字符串转换为 R 可以理解的对象(PO​​SIXct?)。

我有一个日期时间的字符向量,如下所示:

 [1] "Thu Apr 19 00:42:24 +0000 2018" "Sat Apr 14 03:08:30 +0000 2018" "Thu Apr 02 12:42:07 +0000 2015"
 [4] "Wed Apr 25 02:24:49 +0000 2018" "Sun Apr 03 00:37:19 +0000 2016" "Fri Apr 11 10:02:42 +0000 2014"
 [7] "Tue Jan 09 13:57:33 +0000 2018" "Wed Apr 13 09:45:05 +0000 2016" "Thu May 18 11:26:10 +0000 2017"
[10] "Thu Oct 05 03:41:32 +0000 2017"

我的目标是对这些值进行排序,以便最近的日期位于顶部,最早的日期位于底部。据我所知,这将涉及将这些字符串转换为日期时间对象,但即使这一步我还没有开始工作。

我试过了:

lubridate::as_date(dates[1], tz = "UTC", format = NULL)
as.POSIXct(dates[1], tz = "UTC")

但我总是收到以下错误:

Error in as.POSIXlt.character(x, tz, ...) : 
character string is not in a standard unambiguous format

我认为我可以通过指定format参数来解决这个问题,但我到底该怎么做呢?此外,一旦我转换了它们(或者,如果我不需要转换它们,则不这样做) - 我该如何对这些日期进行排序?

任何帮助将不胜感激,在此先感谢!

标签: rsortingdateposixct

解决方案


或者我们可以使用order(as.Date()).

> dt[order(as.Date(dt, format="%a %b %d %H:%M:%S %z %Y"))]
 [1] "Fri Apr 11 10:02:42 +0000 2014" "Thu Apr 02 12:42:07 +0000 2015" "Sun Apr 03 00:37:19 +0000 2016"
 [4] "Wed Apr 13 09:45:05 +0000 2016" "Thu May 18 11:26:10 +0000 2017" "Thu Oct 05 03:41:32 +0000 2017"
 [7] "Tue Jan 09 13:57:33 +0000 2018" "Sat Apr 14 03:08:30 +0000 2018" "Thu Apr 19 00:42:24 +0000 2018"
[10] "Wed Apr 25 02:24:49 +0000 2018"

数据

dt <- c("Thu Apr 19 00:42:24 +0000 2018", "Sat Apr 14 03:08:30 +0000 2018" ,
        "Thu Apr 02 12:42:07 +0000 2015", "Wed Apr 25 02:24:49 +0000 2018", 
        "Sun Apr 03 00:37:19 +0000 2016", "Fri Apr 11 10:02:42 +0000 2014",
        "Tue Jan 09 13:57:33 +0000 2018" ,"Wed Apr 13 09:45:05 +0000 2016" ,
        "Thu May 18 11:26:10 +0000 2017","Thu Oct 05 03:41:32 +0000 2017")

推荐阅读