R - 将整数转换为日期

时间:2016-12-03 13:23:47

标签: r date

我有如下整数:

41764 41764 42634 42634 42445 42445 41792 41807 41813 41842 41838 41848 41849 41837

哪个需要转换成日期,时间无关紧要。

我被告知,当它被转换时应该是在2014年,我试过的当前转换要么是1984年还是2084年。

谢谢!

3 个答案:

答案 0 :(得分:3)

Sam Firke的janitor软件包包含清理此Excel混乱的功能:

x <- c(41764L, 41764L, 42634L, 42634L, 42445L, 42445L, 41792L, 41807L, 
       41813L, 41842L, 41838L, 41848L, 41849L, 41837L)

janitor::excel_numeric_to_date(x)
##  [1] "2014-05-05" "2014-05-05" "2016-09-21" "2016-09-21" "2016-03-16" "2016-03-16" "2014-06-02"
##  [8] "2014-06-17" "2014-06-23" "2014-07-22" "2014-07-18" "2014-07-28" "2014-07-29" "2014-07-17"

Excel阅读器功能可能会为您解决这个问题,这将是最好的方法。

答案 1 :(得分:2)

我假设你的Excel日期整数在这里。 Microsoft Office Excel将日期存储为称为序列值的序列号。例如,在Microsoft Office Excel for Windows中,1900年1月1日是序列号1,2008年1月1日是序列号39448,因为它是在1900年1月1日之后的39,448天。

请注意Excel错误地假定1900年是闰年。今天计算时没问题。

enter image description here

Microsoft Excel正确处理所有其他闰年,包括不是闰年的世纪年(例如,2100年)。只有1900年才被错误处理。

有关详细信息,请参阅Microsoft Knowledge Base

@loki提出的R脚本和Excel中的计算之间存在两天的偏移。

enter image description here

请阅读以下日期转换帮助文档(摘要见下文):

## date given as number of days since 1900-01-01 (a date in 1989)
as.Date(32768, origin = "1900-01-01")
## Excel is said to use 1900-01-01 as day 1 (Windows default) or
## 1904-01-01 as day 0 (Mac default), but this is complicated by Excel
## incorrectly treating 1900 as a leap year.
## So for dates (post-1901) from Windows Excel
as.Date(35981, origin = "1899-12-30") # 1998-07-05
## and Mac Excel
as.Date(34519, origin = "1904-01-01") # 1998-07-05
## (these values come from http://support.microsoft.com/kb/214330)

答案 2 :(得分:1)

使用as.Date()作为@MFR指出。但是,请使用origin 1900-01-01

x <- c(41764, 41764, 42634, 42634, 42445, 42445, 41792, 41807, 
       41813, 41842, 41838, 41848, 41849, 41837)

as.POSIXct.as.Date(x, origin = "1900-01-01")
# [1] "2014-05-07" "2014-05-07" "2016-09-23" "2016-09-23" "2016-03-18"
# [6] "2016-03-18" "2014-06-04" "2014-06-19" "2014-06-25" "2014-07-24"
# [11] "2014-07-20" "2014-07-30" "2014-07-31" "2014-07-19"