读取日期从Excel到R

时间:2016-01-27 08:32:08

标签: r excel csv datetime import

我有多个csv文件需要读入R.文件的第一列包含日期和时间,当我加载数据框时,我将其转换为POSIXlt。我的每个csv文件都在Excel中以相同的方式格式化日期和时间,但是,某些文件的读取方式不同。

例如,

导入后,我的文件看起来像这样:

  date                value
1 2011/01/01 00:00:00 39
2 2011/01/01 00:15:00 35
3 2011/01/01 00:30:00 38
4 2011/01/01 00:45:00 39
5 2011/01/01 01:00:00 38
6 2011/01/01 01:15:00 38

因此,我用来修改格式的代码是:

DATA$date <- as.POSIXlt(DATA$date,format="%Y/%m/%d %H:%M:%S")

但是,有些文件被读入:

  date             value
1 01/01/2011 00:00 39
2 01/01/2011 00:15 35
3 01/01/2011 00:30 38
4 01/01/2011 00:45 39
5 01/01/2011 01:00 38
6 01/01/2011 01:15 38

这意味着我的代码格式部分不起作用并出错。因此,无论如何都要自动检测date列所在的格式?或者,有没有办法知道它将如何被读取,因为Excel中列的格式在两者上是相同的。

1 个答案:

答案 0 :(得分:2)

使用错误的格式字符串进行日期输入时,我似乎得到NA个值。如果是这种情况,则分两步解决此问题。首先,假设您有三小时,分钟和秒来格式化Excel中的日期:

date.original <- DATA$date
DATA$date <- as.POSIXlt(DATA$date,format="%Y/%m/%d %H:%M:%S")

对于那些缺少秒的日期,这应该在NA列中保留date个值。然后你可以试试这个:

DATA$date[is.na(DATA$date)] <- as.POSIXlt(date.original, format="%Y/%m/%d %H:%M")

这应该涵盖剩余的数据。

数据

DATA <- data.frame(date=c('2011/01/01 00:00:00', '2011/01/01 00:15',
                          '2011/01/01 00:30:00', '2011/01/01 00:45'),
                   value=c(39, 35, 38, 39))