R语言日期转换:将dd/mm/yyyy HH:mm格式日期转为yyyy-mm-dd的方法
问题根源
你当前
Date_Col的实际格式为日/月/四位年 时分,此前所有转换逻辑都误用了「月/日/年」的格式规则,导致解析完全错误:
- 直接调用
as.Date未指定格式时,R默认按年在前的规则猜测格式,把开头的日值当成了年份,才会出现0014-10-20这类异常结果;- 用
as.Date(df$Date_Col, "%m/%d/%Y")时,会把第一个字段的数值识别为月份,当该值超过12时就返回NA,仅当输入的日、月值都≤12时才会碰巧解析出错误的日期(比如输入07/06/2016被错解析为7月6日,而非实际的6月7日),和你观察到的仅单个值有效现象完全匹配;- 用lubridate的
mdy()是针对「月-日-年」格式的解析函数,和当前数据的「日-月-年」规则不匹配,所以全部解析失败返回NA。
可行转换方法
方法1:base R 原生实现
直接给as.Date指定对应「日/月/年」的格式参数,时间后缀会被自动忽略:
df$Date_Col <- as.Date(df$Date_Col, format = "%d/%m/%Y")
方法2:lubridate 实现
对应「日-月-年」的解析函数是dmy(),也可以先解析完整的时间戳再转日期格式:
library(lubridate) # 直接解析日-月-年的日期部分 df$Date_Col <- as.Date(dmy(df$Date_Col)) # 或者先解析完整的带时间格式的字符串再提取日期,效果一致 # df$Date_Col <- as.Date(dmy_hms(df$Date_Col))
转换完成后,Date_Col会以R标准Date类存储,输出默认就是yyyy-mm-dd格式,符合需求。
内容的提问来源于stack exchange,提问作者zhd_
相关产品推荐
相关产品推荐

