我有一个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
虽然我可以在事后轻松删除日期(我不想要),但我的问题是秒的小数级别会丢失。我需要保留它们。我保持自定义时间格式的正确方法是什么?
谢谢。
答案 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
调用产生)似乎导出,包括毫秒。