簡體   English   中英

將 Excel 數字轉換為日期

[英]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參數使用不同的選項( modernmac 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM