将Excel数值转换为date
我有一个向量的数值Exceldateie
date <- c(42963,42994,42903,42933,42964)
当我使用janitor
包中的as.yearmon
函数和zoo
包中的as.yearmon
函数
as.yearmon(excel_numeric_to_date(date)) [1] "Aug 2016" "Sep 2016" "Jun 2017" "Jul 2017" "Aug 2017"
但是, date
向量元素的第一个转换是不正确的。 实际结果是:
as.yearmon(excel_numeric_to_date(date)) [1] "Aug 2017" "Sep 2017" "Jun 2017" "Jul 2017" "Aug 2017"
我已经尝试在date_system
中使用excel_numeric_to_date
参数的不同选项( modern
和mac pre-2011
),但它也不帮助
excel版本是2010年
你可以简单地使用as.Date
并指定原点,即
as.Date(date, origin="1899-12-30") #[1] "2017-08-16" "2017-09-16" "2017-06-17" "2017-07-17" "2017-08-17" #or format it to your liking, format(as.Date(date, origin="1899-12-30"), '%b %Y') #[1] "Aug 2017" "Sep 2017" "Jun 2017" "Jul 2017" "Aug 2017"
这个链接提供了相当多的关于这个问题的信息。
如果要从Excel中转换date,可以使用具有特定origin
as.Date()
。 根据文档, '1900-01-01'
”在Excel中用作date。
date <- c(42963,42994,42903,42933,42964)
这是as.Date()
的结果:
as.Date(date, origin = "1900-01-01") [1] "2017-08-18" "2017-09-18" "2017-06-19" "2017-07-19" "2017-08-19"
然后你可以使用zoo :: as.yearmon()`来获得预期的结果:
zoo::as.yearmon(as.Date(date, origin = "1900-01-01")) [1] "Aug 2017" "Sep 2017" "Jun 2017" "Jul 2017" "Aug 2017"
excel_numeric_to_date
来查看函数的代码,你会发现它是这个问题的其他答案使用的代码行的包装: as.Date(date_num, origin = "1899-12-30"
。
所以这不是问题。
这里的基本问题是关于date格式的混淆。 你说你期望你的第一个数字42963
成为"Aug 2016"
,最后一个数字是42964
成为"Aug 2017"
。 后者只比前者多一个,在转换中出现 – 他们应该相隔一天,而不是像你期待的那样相隔一年。
> excel_numeric_to_date(c(42963, 42964)) [1] "2017-08-16" "2017-08-17" # as expected, they are one day apart
也许date和年份字段在数据的上游切换到整数date的位置,因为select的值很难在这里告诉。