从Excel到R的日期,平台依赖

Ric*_*rta 12 excel xls r date gdata

我正在xls使用导入文件gdata.我正在使用转换日期列as.Date来转换日期

根据手册as.Date,日期来源取决于平台,因此我决定相应使用哪个来源

.origin <- ifelse(Sys.info()[['sysname']] == "Windows", "1899-12-30", "1904-01-01")
as.Date(myData$Date, origin=.origin)
Run Code Online (Sandbox Code Playgroud)

但是,我想知道我是否应该考虑正在读取文件的平台或编写文件的平台?

为了它的价值,我目前正在测试没有excel的linux盒子上的代码,并且使用正确的Dates生成 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)
Run Code Online (Sandbox Code Playgroud)

had*_*ley 5

你可以试试(极端)新的exell包:https://github.com/hadley/exell.它将excel日期加载到POSIXct中,根据文件是由Windows还是Mac Excel正确选择原点.


42-*_*42- 3

是的,您应该考虑文件写入的位置。Excel-Windows 似乎能够区分 Mac 写入的日期和 Win 写入的日期,但您得到的证据表明这些是源自 Mac 的 .xls 文件。

\n\n

最安全的方法是在输入数据的 Excel 版本中工作,并使用格式菜单打开一个对话框,您可以从中选择 as-Date 和自定义格式 yyyy-mm-dd。然后另存为 csv 文件,您将能够将 colClasses 向量“日期”导入到 R 中,并将其放在适当的列位置。但这听起来似乎是一个不可用的选项。

\n\n

我想它不适用于 Linux 机器上的您,所以这只是 Mac 的抱怨:gdata-package 给出弃用警告,然后无法使用普通 Perl 5.8 安装在 R 3.0.0 上安装 XLSX 支持文件在\'/opt/local/bin/perl\'中。尽管 \'gdata::findPerl` 能够成功找到它。

\n\n

此时,我认为问题应该重定向到询问是否可以诱导 gdata 函数检查文件的属性。在查看了 xls 读取的代码库后,我相当怀疑,因为没有看到任何提及检查不同 xls 版本的内容。

\n\n

在使用 Mac 版本的 Excel 创建的空白 xls 文件的末尾附近,使用文本编辑器查看,我看到:

\n\n
Worksheets\xcb\x9b\xcb\x87\xcb\x87\xcb\x87\xcb\x87\xcb\x87 \xc2\xbfF$Microsoft Excel 97 - 2004 Worksheet\xcb\x9b\xcb\x87\xcb\x87\xcb\x878FIBExcel.Sheet.8\xcb\x9b\xcb\x87\n\xe2\x80\xa1\xc3\x96\xc3\xbc\xc3\x9a\xcb\x98Oh\xc2\xb4\xc3\xab+\'\xe2\x89\xa5\xc5\xb80\xc3\xaeHPh\xc3\x84\xc2\xa7\n\xe2\x88\x9e\xc2\xba\xc6\x92\'David WinsemiusDavid WinsemiusMicrosoft Macintosh Excel@\xc3\xaa\xcb\x9a\xc3\xa1!\xc3\x8b+\xc5\x92@\xc3\xaa\'\xc3\xa5-\xc3\x8b+\xc5\x92G\xc2\xbb\xcb\x9b\xcb\x87\xcb\x87\xcb\x87PICT\xc2\xbfK\xc3\x84\xcb\x87\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一个区别是,以相同方式检查的 Windows 版本的工作表类型为“Excel 2003 Worksheet”,而 Mac 版本的工作表类型为“Excel 97 - 2004”。\n因此,也许您可​​以强制 R 绕过在扫描“Macintosh”期间读取或 grep 时触发的所有错误。也许 Linux-R 更能抵抗此类事情?

\n\n
Error: invalid multibyte string at \'<ff>\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还收到了来自 grep 的一系列警告,表明我可能无法“查看”某些字符串:

\n\n
Warning message:\nIn grep("Macintosh", lin) : input string 1 is invalid in this locale\n
Run Code Online (Sandbox Code Playgroud)\n\n

您也许能够从 xls2csv.pl 中的 Perl 代码劫持一些更强大的代码,该代码是 gdata 包的一部分。

\n