[英]Convert Excel numeric to date
我有一個數字 excel 日期向量,即
date <- c(42963,42994,42903,42933,42964)
輸出我使用時要求excel_numeric_to_date
功能從janitor
包和as.yearmon
功能從zoo
包
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 轉換日期,你可以使用as.Date()
和一個特定的origin
。 根據文檔, "1900-01-0"'
在 Windows 上的 Excel 中用作日期,但"this is complicated by Excel incorrectly treating 1900 as a leap year"
, "this is complicated by Excel incorrectly treating 1900 as a leap year"
。 所以"1899-12-30"
應該用於 1901 年后的日期:
date <- c(42963,42994,42903,42933,42964)
這是as.Date()
的結果:
as.Date(date, origin = "1899-12-30")
[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 = "1899-12-30"))
[1] "Aug 2017" "Sep 2017" "Jun 2017" "Jul 2017" "Aug 2017"
鍵入excel_numeric_to_date
以查看函數的代碼,您會看到它是此問題的其他答案所使用的代碼行的包裝器: as.Date(date_num, origin = "1899-12-30")
。
所以這不是問題。
這里的根本問題是對日期格式的混淆。 你說你希望你的第一個數字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
也許日期和年份字段在數據映射到整數日期時在數據中向上游切換,由於選擇的值,這里很難說清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.