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

问题描述 投票:0回答:3

我有时间戳作为字符类型的数据帧,格式为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"
r datetime
3个回答
1
投票

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

strptime() help

对您的问题最重要的是:

%d作为十进制数字的月份日期(01-31)。

%H小时数十进制数(00-23)。作为一个特殊的例外,输入接受24:00:00之类的字符串,因为ISO 8601允许这些。

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

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

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

字符串的一部分也是分隔符。在你的情况下“ - ”。

然后你可以使用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")

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"

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.