我正在尝试将属于数据帧一部分的列从军事时间转换为标准时间。我还要指出AM / PM。我正在尝试在R的lubridate软件包的功能范围内进行此操作。
从另一个名为“ df”的数据框架中,我使用以下代码创建了一个名为“ out”的新数据框架:
out <- df %>% mutate(NewDate = parse_date_time(CreatedDate, orders = "mdy IMS p")) %>%
select(CreatedDate, NewDate)
我正在使用mutate函数操作的“ df”列(称为“ CreatedDate”)具有如下所示的单元格:
01/01/2019 02:12:37 PM
01/01/2019 10:37:57 PM
01/02/2014 05:10:35 AM
我已经操纵了该列以生成名为“ NewDate”的新列,如下所示:
2018-04-12 11:11:26
2018-11-13 13:06:56
2018-04-16 05:30:13
我正在尝试使“ NewDate”列标准化,但要按常规时间包含AM / PM名称,就像在应用parse_date_time函数之前所做的那样。
我希望,通过在我的parse_date_time
函数中包含“ mdy IMS p”,我将在NewDate列中生成如下内容:
2018-04-12 11:11:26 AM
2018-11-13 01:06:56 PM
2018-04-16 05:30:13 AM
答案 0 :(得分:4)
您可以使用format
在基数R中完成
date_time <- as.POSIXct("2018-04-12 21:11:26")
format(date_time, "%Y-%m-%d %I:%M:%S %p")
# [1] "2018-04-12 09:11:26 PM"
%Y
-4位数字年份
%m
-十进制月份
%d
-十进制日期
%H
-十进制小时(24小时)
%I
-十进制小时(12小时)
%M
-十进制分钟
%S
-十进制秒
%p
-上午/下午
答案 1 :(得分:0)
如果要使用lubridate来保持一致性并与代码的其他方面一起使用,则可以使用与orders参数中张贴的@Jav相同的代码。如果日期格式不一致,这将很有帮助。如果有些是军方的,有些是AM / PM格式的,则可以执行以下操作:
df <- data.frame(CreatedDate = c("01/01/2019 02:12:37 PM",
"01/11/2019 06:12:37 PM",
"01/01/19 10:37:57 PM",
"2019-01-02 21:17:12"),
stringsAsFactors = FALSE)
您会看到所有混合格式,这很罕见。
out <- df %>%
mutate(NewDate = parse_date_time(CreatedDate,
orders = c("%m/%d/%Y %I:%M:%S %p",
"%m/%d/%y %I:%M:%S %p",
"%Y-%m-%d %H:%M:%S"))) %>%
dplyr::select(CreatedDate, NewDate)
最终结果应该是格式一致的新日期,如下所示:
CreatedDate NewDate
1 01/01/2019 02:12:37 PM 2019-01-01 14:12:37
2 01/11/2019 06:12:37 PM 2019-01-11 18:12:37
3 01/01/19 10:37:57 PM 2019-01-01 22:37:57
4 2019-01-02 21:17:12 2019-01-02 21:17:12