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)
你可以试试(极端)新的exell包:https://github.com/hadley/exell.它将excel日期加载到POSIXct中,根据文件是由Windows还是Mac Excel正确选择原点.
是的,您应该考虑文件写入的位置。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\nWorksheets\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\nError: invalid multibyte string at \'<ff>\'\n
Run Code Online (Sandbox Code Playgroud)\n\n我还收到了来自 grep 的一系列警告,表明我可能无法“查看”某些字符串:
\n\nWarning 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