如何将dd / mm / yyyy hh:mm:ss转换为dd-mm-yy hh:mm中的R?

时间:2018-03-05 11:39:22

标签: r datetime

我的数据框的时间戳为字符类型,格式为dd-mm-yyyy hh:mm
例如:

"05-02-2018 06:30"

我需要mm-dd-yyyy hh:mm格式的输出,即:

"02-05-2018 06.30"

我尝试使用函数mdy()和as.POSIXct
的lubridate库 但它不适用于所有记录 -
几乎没有投掷警告信息"failed to parse."
它主要适用于 日是>的日期。 12 ,例如:

"19-06-2017 16:30"
"22-10-2017 11:45"
"14-09-2017 16:00"

3 个答案:

答案 0 :(得分:1)

Lubridate的dmy_hms功能有效。

方法1:

library(lubridate)
dts <- c("19-06-2017 16:30" ,"22-10-2017 11:45", "14-09-2017 16:00")
dts <- dmy_hms(dts)
print(dts)

[1] "19-06-2017 16:30" "22-10-2017 11:45" "14-09-2017 16:00"

方法2:

library(lubridate)
dts <- c("19-06-2017 16:30" ,"22-10-2017 11:45", "14-09-2017 16:00")
dts <- fast_strptime(dts, format = '%d-%m-%Y %H:%M')
print(dts)

[1] "2017-06-19 16:30:00 UTC" "2017-10-22 11:45:00 UTC" "2017-09-14 16:00:00 UTC"

答案 1 :(得分:1)

使用?strptime()显示帮助。在帮助文件中,有一个格式属性列表,您必须在使用strptime()时指定:

strptime() help

对您的问题最重要的是:

%d 十进制数字(01-31)。

%H 小时数十进制数(00-23)。作为一个特殊的异常,如24:00:00接受输入,因为ISO 8601允许这些。

%米 月份为十进制数字(01-12)。

%M 分钟为十进制数(00-59)。

%Y 与世纪的一年。请注意,虽然原始公历中没有零,但ISO 8601:2004将其定义为有效(解释为1BC):请参阅https://en.wikipedia.org/wiki/0_(year)。请注意,标准还规定,其日历中的1582年之前的年份应仅在有关各方同意的情况下使用。

字符串的一部分也是Seperator。在你的情况下&#34; - &#34;。

然后您可以使用strptime()和format()来交换月和日。使用您的示例:

dates <- c( "19-06-2017 16:30" ,"22-10-2017 11:45", "14-09-2017 16:00")
dates <- strptime(dates, format="%d-%m-%Y %H:%M")
dates_changed <- format(dates, "%m-%d-%Y %H:%M")

答案 2 :(得分:0)

检查strptime()功能的帮助,以更好地确定您的时间/日期格式。

您可以在此处使用多种方法。

请参阅此链接中的lubridate个包的cheetsheet:Lubridate