无法将字符转换为日期时间

时间:2019-11-01 08:54:40

标签: r dataframe datetime dplyr lubridate

这不是重复的。我已经提到了这些帖子123

我有一个如下数据框:

t_df <- data.frame("SN" = c("AabcC123","ABC123","ABC123","MNO098","MNO098","MNO098"), 
                      "code" = c("ABC1111","DEF222","GHI133","","MNO1123","MNO567"), 
                      "d_time" = c("21/12/2012 12:12","30/06/2019 11:11","20/02/2027 10:10","22/11/2327 09:09:11","5/2/1927 08:08:12",""))
t_df <- data.frame(lapply(t_df, as.character), stringsAsFactors=FALSE)

当我读取csv文件时,我所有的日期都是character类型。

因此,当我尝试对数据框进行排序时,它仅基于第一个字符起作用。

我想将其转换为Datetime格式。

尽管我根据上面链接的其他帖子尝试了以下选项,但没有任何帮助。它返回NA

as_datetime(t_df$d_time, "%d/%m/%Y %H:%M:%S")  

as.POSIXct(t_df$d_time,format="%d/%m/%Y %H:%M:%S")

dmy_hms(t_df$d_time)

您能帮我将数据类型转换为datetime吗?

2 个答案:

答案 0 :(得分:2)

一个想法是计算冒号(:),如果只有1,则将秒添加为:00,即

library(stringr) #for str_count()

t_df$d_time[t_df$d_time != ''] <- ifelse(str_count(t_df$d_time[t_df$d_time != ''], ':') < 2, 
                                               paste0(t_df$d_time[t_df$d_time != ''], ':00'), 
                                                               t_df$d_time[t_df$d_time != ''])

as.POSIXct(t_df$d_time, format = "%d/%m/%Y %H:%M:%S")
#[1] "2012-12-21 12:12:00 EET" "2019-06-30 11:11:00 +03" "2027-02-20 10:10:00 +03" "2327-11-22 09:09:11 +03" "1927-02-05 08:08:12 EET" NA

答案 1 :(得分:1)

您必须将格式调整为数据中的格式%d/%m/%Y。 例如,在第一行中,您有21/12/2012,即day/month/year。 在R中,日的简称为%d,月的简称为%m,四位数年份的简称为%Y。中间的斜杠/是指字符串中的斜杠。

因此

t_df <- data.frame("SN" = c("AabcC123","ABC123","ABC123","MNO098","MNO098","MNO098"), 
                   "code" = c("ABC1111","DEF222","GHI133","","MNO1123","MNO567"), 
                   "d_time" = c("21/12/2012","30/06/2019","20/02/2027","22/11/2327","5/2/1927",""),
                   stringsAsFactors = FALSE)

t_df$d_time <- as.POSIXct(t_df$d_time, format = "%d/%m/%Y")

请注意,大多数情况下,在创建data.frame时,最好像我一样使用选项stringsAsFactors = FALSE