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
。但我的数据可以包含mixH: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