在R语言中转换字符列为日期时间格式遇空值求助
R语言日期时间转换及拆分解决方案
核心问题:格式不匹配导致转换失败
你所有尝试返回空值(NA)的根本原因是日期格式字符串与原始数据的实际格式不匹配,以及使用了错误的解析函数。
第一步:先确认原始日期字符串格式
先运行以下代码查看你的minute_sleep$date实际格式:
head(minute_sleep$date)
假设输出类似"03/15/2023 08:45:30"(月/日/年 时:分:秒),下面针对该格式给出解决方案。
第二步:正确转换为日期时间格式
方法1:使用base R
# 格式符说明:%m=月, %d=日, %Y=4位年, %H=24小时制, %M=分, %S=秒 date_time <- as.POSIXct(minute_sleep$date, format = "%m/%d/%Y %H:%M:%S", tz = "UTC")
方法2:使用lubridate包(更简洁)
lubridate的函数对应不同日期格式,选对函数即可:
library(lubridate) # mdy_hms对应「月-日-年 时-分-秒」格式 date_time <- mdy_hms(minute_sleep$date)
第三步:拆分日期与时间列
无需额外预处理,直接从转换后的日期时间对象提取:
# 提取日期(Date类型) date_col <- as.Date(date_time) # 提取时间(字符类型,或用hms包转为时间类型) time_col <- format(date_time, "%H:%M:%S") # lubridate简便写法 date_col <- date(date_time) time_col <- hms::as_hms(date_time)
你的错误点解析
as.numeric(minute_sleep$date):直接把字符型日期转数值无意义,必然返回NAstrptime(..., format="%H:%M:%S"):只指定时间格式,但原始字符串包含日期部分,匹配失败返回NAas.POSIXct(..., format="%m/%d/%YT%H:%M:%OS"):格式中的T多余,原始数据是空格分隔日期和时间,不是Tymd_hms(...):该函数按「年-月-日-时-分-秒」解析,但你的数据是「月-日-年」开头,格式不匹配返回NA
内容的提问来源于stack exchange,提问作者VivianeKarpinski
相关产品推荐
相关产品推荐

