【问题标题】:How do I import custom time format values from Excel into R?如何将自定义时间格式值从 Excel 导入 R?
【发布时间】:2015-10-12 19:25:31
【问题描述】:

我有一个 R 脚本,它使用 XLConnect 包循环并读取多个 Excel 电子表格到 R 中。将各个电子表格组合成一个大数据框,然后以 .csv 文件的形式写出以供在 Excel 中进一步使用。

newDf <- readWorksheetFromFile(filename,sheet=newid,header=TRUE,
                            startRow=1,endRow=17,startCol=1,endCol=6) 

Excel 文件具有一列自定义格式的时间值:HH:MM:SS.000

即00:18:06.264

当我打开生成的 csv 文件时,该列的值显示为,例如,

1899-12-31 00:06:18

虽然我可以在事后轻松删除日期(我不想要),但我的问题是秒的十进制级别丢失了。我需要保留它们。我保持自定义时间格式不变的正确方法是什么?

谢谢。

【问题讨论】:

  • 什么“生成的 csv 文件”?那应该生成一个 R 数据对象,而不是 csv 文件。
  • 读入所有 Excel 工作表并组合成一个大数据框(使用 rbind)后,我使用 write.csv 使结果再次在 Excel 中可见。当我打开它时,我看到的是没有小数的时间。

标签: r excel time xlconnect


【解决方案1】:

从 0.2-10 版开始,XLConnect 实际上读取 Excel 中日期/时间的毫秒部分。默认情况下,它们只是不显示在 R 中。您可以使用 options(digits.secs = 6) 在 R 控制台中相应地显示它们。

关于 1899-12-31:Excel 日期/时间实际上只是表示自 1900-01-00 以来的天数(是的,第 00 天!- 请参阅 http://www.cpearson.com/excel/datetime.htm)。小数天表示小时、分钟、秒和毫秒。因此,没有日期的时间仅表示为小数 0.x,它被转换为 1899-12-31 %HH:%MM:%SS.nnn,因为 1900-01-00 实际上并不存在。 如果您想在读取日期时查看基础(小数)数字,您可以手动将列类型指定为 numeric 并在对 readWorksheet 的调用中使用 forceConversion = TRUE,例如readWorksheet(..., colTypes = c(..., "numeric", ...), forceConversion = TRUE)

关于 CSV 导出:当我使用 write.csv2 时,POSIXct 列(由对 readWorksheet 的调用产生)似乎被导出,包括毫秒。

【讨论】:

    【解决方案2】:

    使用 format.POSIXt

     write.csv( format( as.POSIXct("1899-12-31 00:06:18.123"), "%H:%M:%OS3"), file="")
    "","x"
    "1","00:06:19.123"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-12
      • 2017-03-27
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 2021-03-18
      相关资源
      最近更新 更多