R语言中数字格式日期转换问题求助
解决R中6位整数日期(如180410)转日期格式的问题
我之前处理用户行为日志数据时也碰到过一模一样的坑!你得到NA的核心原因是:as.Date()默认会把整数类型的输入当成自1970-01-01以来的天数(也就是Julian日期),完全识别不了你这种YYMMDD格式的6位数字。下面给你两种靠谱的解决方法:
方法一:基础R原生函数(无需额外包)
步骤很简单,先把整数转成字符型,再给as.Date()指定正确的格式参数:
# 模拟你的整数日期列 date_int <- c(180410, 180520, 190101) # 一步完成转换:先转字符,再指定格式%y%m%d formatted_dates <- as.Date(as.character(date_int), format = "%y%m%d") # 查看结果 formatted_dates #> [1] "2018-04-10" "2018-05-20" "2019-01-01"
这里的格式参数含义:
%y:两位数字的年份(R默认会把69及以上的数字识别为19xx,68及以下识别为20xx)%m:两位数字的月份%d:两位数字的日期
方法二:用lubridate包更灵活(推荐)
如果你经常处理日期时间,lubridate包会让你的代码更简洁易读,它能自动识别多种格式,甚至不用手动转字符:
# 先安装并加载包(第一次用需要安装) # install.packages("lubridate") library(lubridate) # 直接转换6位整数日期 formatted_dates <- ymd(date_int, truncated = 3) # 查看结果 formatted_dates #> [1] "2018-04-10" "2018-05-20" "2019-01-01"
truncated = 3参数的作用是告诉函数:输入的数字是截断了的日期,后面3位是月和日(因为6位数字是YY+MM+DD,总共6位,截断3位后剩下的是年份)。如果你的日期是其他截断格式,这个参数还能灵活调整。
为什么之前会返回NA?
再啰嗦一句:当你直接给as.Date()传入整数时,它会默认执行as.Date.numeric(),把整数当成从1970-01-01开始的天数。比如你输入的180410,它会转换成1970-01-01 + 180410天,这显然和你实际的2018-04-10完全不匹配,所以返回NA。
内容的提问来源于stack exchange,提问作者Poorna Sagar
相关产品推荐
相关产品推荐

