【问题标题】:Dates from Excel to R, platform dependency从 Excel 到 R 的日期,平台依赖性
【发布时间】: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”。

标签: r excel date gdata xls


【解决方案1】:

您可以尝试(非常)新的 exell 软件包:https://github.com/hadley/exell。它将 Excel 日期加载到 POSIXct 中,根据文件是由 Windows 还是 Mac Excel 编写的,正确选择来源。

【讨论】:

    【解决方案2】:

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

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

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

    在这一点上,我认为问题应该转向询问您是否可以诱使 gdata 函数检查文件的属性。在looking at the codebase for xls reading, 之后我很怀疑,因为没有看到任何提及检查不同 xls 版本的内容。

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

    Worksheets˛ˇˇˇˇˇ ¿F$Microsoft Excel 97 - 2004 Worksheet˛ˇˇˇ8FIBExcel.Sheet.8˛ˇ
    ‡ÖüÚ˘Oh´ë+'≥Ÿ0îHPhħ
    ∞ºƒ'David WinsemiusDavid WinsemiusMicrosoft Macintosh Excel@ê˚á!Ë+Œ@ê'å-Ë+ŒG»˛ˇˇˇPICT¿Kġ
    

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

    Error: invalid multibyte string at '<ff>'
    

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

    Warning message:
    In grep("Macintosh", lin) : input string 1 is invalid in this locale
    

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

    【讨论】:

    • 很有趣,谢谢大卫。如果它依赖于xls 文件的写入位置,那么文件本身应该有一些关于其来源的指示。我会四处寻找。
    • 是的,你是对的,我无法访问原始源
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2013-04-09
    • 2020-02-04
    相关资源
    最近更新 更多