R语言求助:将字符型日期列转为保留秒数的标准datetime类型
问题根源
你使用的parse_date()函数仅用于解析精度到「日」的Date类型数据,天生不支持保留时分秒信息,这是转换后秒数被截断的核心原因。同时从你提供的数据集结构可以看到,原始时间字符串为日/月/年 时:分格式,部分记录包含秒值,需要用支持日期时间(datetime)类型的解析函数按对应格式处理。
修复方案
使用lubridate包的dmy_hms()函数做转换即可,该函数会自动匹配「日-月-年 时:分:秒」的时间格式,遇到没有标注秒的记录会自动补00秒,最终输出秒级精度的POSIXct标准日期时间类型,完全满足后续bind_rows()的类型一致性要求,也不会丢失秒级精度。
转换代码
library(dplyr) library(lubridate) # 逐个转换各数据框的时间列 m5_2021 <- m5_2021 %>% mutate(across(c(started_at, ended_at), dmy_hms)) m6_2021 <- m6_2021 %>% mutate(across(c(started_at, ended_at), dmy_hms)) m12_2021 <- m12_2021 %>% mutate(across(c(started_at, ended_at), dmy_hms))
效率优化建议
如果需要处理的月份数据较多,可以把所有待合并的数据框存入列表,统一完成转换后直接合并,避免重复编写相同代码:
# 将所有待合并数据框放入列表 month_df_list <- list(m5_2021, m6_2021, m12_2021) # 批量对列表内所有数据框做时间类型转换 month_df_list <- lapply(month_df_list, function(df) { df %>% mutate(across(c(started_at, ended_at), dmy_hms)) }) # 直接合并为总表,不会出现类型冲突 full_year_data <- bind_rows(month_df_list)
校验方式
转换完成后可执行head(m5_2021$started_at)查看时间值,或执行class(m5_2021$started_at)验证列类型,返回结果包含POSIXct即为正确的日期时间类型。
内容的提问来源于stack exchange,提问作者Kevin Lam
相关产品推荐
相关产品推荐

