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

R 无法将字符转换为日期时间,r,dataframe,datetime,dplyr,lubridate,R,Dataframe,Datetime,Dplyr,Lubridate,这不是重复的。我已经提到了这些帖子,, 我有一个如下所示的数据帧: t_df <- data.frame("SN" = c("AabcC123","ABC123","ABC123","MNO098","MNO098","MNO098"), "code" = c("ABC1111","DEF222","GHI133","","MNO1123","MNO567"), "d_time" = c("21/1

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

我有一个如下所示的数据帧:

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)

您能帮我将数据类型转换为
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")

t_df一个想法是计算冒号(
),如果只有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
library(stringr)#用于stru计数()

你为什么还要定义时间?你在那里只有约会。试试
as.POSIXct(“21/12/2012”,格式=“%d/%m/%Y”)
更新了帖子。我也需要时间well@Sotos-当我使用'as.POSIXct(“21/12/2012 12:12,格式='%d/%m/%Y%H:%m:%S')时,您的代码为我的数据返回
NA
,甚至为您的示例返回
21/12/2012
,如果我的数据仅包含
H
m
。但我的数据可以包含mix
H:M
H:M:S
,如示例所示。它给出NA,因为您也定义秒,但您只有小时:分钟(12:12)…谢谢。投票赞成努力和时间。标记为answer如果我只坚持
H:M
,而不管数据中存在什么,我只会得到缺失组件的零。这就是工作原理吗?如果你定义的格式只有小时:分钟,那么如果日期有秒,你会得到NA。必须有1个统一格式才能转换。事实上,我认为有些包的时间函数可以接受多种格式一个简单的问题,当我这样使用时,
as.POSIXct(“2220-04-27 00:10”,format=“%Y-%m-%d%H:%m”)和
as.Date(“2220-04-27 00:10”,format=“%Y-%m-%d”)
,它在这里工作得很好。但在我拥有百万条记录的真实数据框中,所有的
date`都有
1
day的差异。例如,
date
值为2220-04-26`而datetime为
2220-04-27 00:10
。整个数据帧都会发生这种情况。你能告诉我什么问题吗?听起来不对。我不知道为什么,但是在
as.POSIXct()
中有
时区
原点
参数,它们可能会帮助您解决这个问题
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