我有时间戳作为字符类型的数据帧,格式为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"
使用?strptime()
显示帮助。在帮助文件中,有一个格式属性列表,您在使用strptime()
时必须指定这些属性:
对您的问题最重要的是:
%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")
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"