如何在使用R将xlsx转换为csv时保持时间戳不变?

时间:2018-02-11 16:53:28

标签: r

对于包含字符和日期行的列,我的数据如下所示:

     "COLUMNXYZ" 

第1行一切都很好

第2行是的你是对的

第3行1/5/2015 0:00

第4行1/5/2015 0:15

在读取数据csv时,时间戳记为:

42009

42009.01042等等。

我认为问题是因为列包含字符和日期行导致问题。此外,我在SO上看到了类似问题的早期解决方案,但行中只包含这些示例中的日期,并且通过应用以下代码解决了问题,但在我的情况下它不起作用。

尝试的步骤: XLSX CSV转换:

# Create a vector of Excel files to read
files.to.read = list.files(pattern="xlsx")

# Read each file and write it to csv
lapply(files.to.read, function(f) {

  df = read.xlsx(f, sheet=1)

  write.csv(df, gsub("xlsx", "csv", f), row.names=FALSE)
})

#Restoring the date format
DateandTime <- format(as.POSIXct(strptime(dataset$ColumnXYZ,"%m/%d/%Y %H:%M",tz="")) ,format = "%m/%d/%Y %H:%M")

#Add time stamp in a seperate column to the original dataset
dataset$Period <- DateandTime

1 个答案:

答案 0 :(得分:0)

以下是对我和您的示例文件有用的内容:

步骤1:使用以下函数从您的唯一示例列在Excel中创建第二列:=TEXT(A2,"DD/MM/YYYY hh:mm:ss")。不知何故,这不会影响字符串,但会将日期时间转换为字符串,这就是我所追求的。

步骤2:在R中运行以下命令(显然将路径更改为.xlsx文件):

d = readxl::read_excel("~/SO_Examples/temp1.xlsx", 
                       col_types = 'text')
d
# A tibble: 4 × 2
            col1                col2
               <chr>               <chr>
1        All is well         All is well
2  Yes you are right   Yes you are right
3              42009 05/01/2015 00:00:00
4 42009.010416666664 05/01/2015 00:15:00

正如您所看到的,第一个原始专栏确实没有用。但是我在第1步中创建的第二个似乎没问题。从这里你可以根据需要解析日期。

希望这会有所帮助。如果你有很多excel文件,不幸的是,这可能无法很好地扩展。

<强>加成

对于不同的解决方案,这也不是很好,但会捕获日期,请尝试以下方法:

d = readxl::read_excel("~/SO_Examples/temp1.xlsx", 
                       col_types = 'date')
d
# A tibble: 4 × 1
                 col1 
               <dttm>
1                <NA>
2                <NA>
3 2015-01-05 00:00:00
4 2015-01-05 00:15:00

这将产生大量警告,但正确处理日期时间。也许你可以再次运行相同的代码,这次将数据作为文本加载,并通过保留每次加载尝试的相关部分来组合这两个数据集?