如何将Excel中的自定义时间格式值导入R?

时间:2015-07-22 18:33:22

标签: r excel time xlconnect

我有一个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

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

谢谢。

2 个答案:

答案 0 :(得分:0)

使用format.POSIXt

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

答案 1 :(得分:0)

由于版本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,并在forceConversion = TRUE的调用中使用readWorksheet,例如readWorksheet(..., colTypes = c(..., "numeric", ...), forceConversion = TRUE)

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