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

Unable to convert character to Datetime

这不是重复的。我已经引用了这些帖子 ,2,3

我有如下数据框:

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 格式。

虽然我根据上面链接的其他帖子尝试了以下选项,但没有任何帮助。它returnsNA

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吗?

您必须将格式调整为数据中的格式,即 %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

一个想法是计算冒号(:),如果只有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