如何在R中将字符型Excel日期序列号列转换为日期类型?
解决R中Excel日期序列号转日期类型的问题
你的问题出在用错了日期转换逻辑:你用format="%m-%d-%Y"是针对「月-日-年」格式的字符串,但你的date列是Excel的日期序列号(数字形式的天数),而且还是字符类型,所以格式匹配失败,返回NA。
正确的处理分两步:先把字符型序列号转成数值型,再用as.Date()的origin参数指定Excel日期的起始基准。
用tidyverse(dplyr)的解决方案
dat %>% mutate(date2 = as.Date(as.numeric(date), origin = "1899-12-30"))
基础R解决方案
dat$date2 <- as.Date(as.numeric(dat$date), origin = "1899-12-30")
为什么用origin="1899-12-30"?
Excel的日期系统有个历史bug:错误地将1900年判定为闰年,导致它的日期序列号比实际公历日期多算了2天。所以在R中要对应到Excel的日期,必须把起始点设为1899-12-30,计算结果才会和Excel一致。
比如测试你的第一个值40544:
as.Date(40544, origin = "1899-12-30") # 输出:"2011-01-01"
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

