【发布时间】:2013-03-19 03:55:08
【问题描述】:
我正在使用gdata 导入xls 文件。我正在使用as.Date 转换日期列来转换日期
根据as.Date 的手册,日期来源取决于平台,因此我正在确定相应地使用哪个来源
.origin <- ifelse(Sys.info()[['sysname']] == "Windows", "1899-12-30", "1904-01-01")
as.Date(myData$Date, origin=.origin)
但是,我想知道是否应该考虑读取文件的平台还是写入文件的平台?
对于它的价值,我目前正在没有 excel 的 linux 机器上测试代码,并且使用 origin="1904-01-01" 生成正确的日期
引用`?as.Date'
## 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
## 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)
【问题讨论】:
-
有没有办法将日期列作为字符向量导入,然后进行转换?可能更容易......
-
我很确定这是编写它的系统。此外,这些是不同系统的默认值,但也可以在单个 Excel 文件中进行更改。所以这不能保证在所有情况下都有效。
-
@MattParker,我实际上已经使用
colClasses="character"进行了尝试,但日期仍然以相同的值导入(当然,现在它是一个字符串) -
@BrianDiggs,感谢您指出可以更改 excel 默认值,我会留意的。现在,我假设我正在处理默认设置。
-
@RicardoSaporta,你试过
xlsx包吗?我刚刚使用 Excel 2010 @ Win7 使用保存为“Excel 97-2003”的文件对其进行了测试,它正确地将原点识别为“1899-12-30”。