R语言中Lubridate读取日期时间异常问题求助
解决R中日期解析错误及计算骑行时间差的方案
问题根源
你的日期字符串是DD/MM/YYYY HH:MM格式,但R默认的日期解析逻辑会按MM/DD/YYYY识别,导致日、月、年的解析顺序错乱,出现类似2-07-20的错误结果。
具体解决步骤
1. 正确解析日期时间列
利用tidyverse包含的lubridate包中的dmy_hm()函数,专门处理日/月/年 时:分格式的字符串,将其转换为R可识别的日期时间类型:
library(tidyverse) # 读取CSV并解析日期时间列 Total_trips <- read_csv("1_202107.csv") %>% mutate( started_at = dmy_hm(started_at), ended_at = dmy_hm(ended_at) )
2. 计算骑行时间差
直接用difftime()函数计算ended_at与started_at的时间差,可指定单位(如分钟、小时):
Total_trips <- Total_trips %>% mutate(trip_duration = difftime(ended_at, started_at, units = "mins"))
3. 提取日期组件与星期几
通过lubridate的便捷函数或format(),从已解析的日期中提取所需字段:
Total_trips <- Total_trips %>% mutate( date = as.Date(started_at), day = day(started_at), # 提取日 month = month(started_at),# 提取月 year = year(started_at), # 提取年 # 提取星期几全称(如Friday) day_of_week = wday(started_at, label = TRUE, abbr = FALSE) )
如果习惯用format(),也可以替换为:
Total_trips$day_of_week <- format(Total_trips$date, "%A")
验证结果
经过上述处理,02/07/2021 14:44会被正确解析为2021年7月2日,对应的星期几为Friday(星期五),日期组件与星期几的提取均不会再出现顺序错乱。
内容的提问来源于stack exchange,提问作者MFA Chowdhury
相关产品推荐
相关产品推荐

