R - 导入的csv文件中从chr到POSIXct日期/时间格式的转换以N / A结尾

时间:2016-08-08 20:34:33

标签: r csv timestamp posixct

我导入了一个带有时间戳和值的csv文件(excel)。我将时间戳列转换为R中的可用时间的所有努力都导致N / A.我已经看了几个线程(SO和其他地方)并尝试了很多建议,但不知何故没能成功。我也尝试过各种简单的例子。 R博客和他们一起工作得很好。

> dframe <- read.csv2("file.csv", dec=".", colClasses=c("character","numeric"), as.is=TRUE)

> str(dframe)

    'data.frame':   424 obs. of  2 variables:
     $ d: chr  "2016.08.02 03:59:45" "2016.08.02 04:11:16" "2016.08.02 04:22:45" "2016.08.02 04:34:13" ...
     $ h: num  30 33.3 35.6 35.6 48.9 48.9 48.9 47.8 46.7 46.7 ...

我相信这是一个好的开始。然后:

> dframe$d <- as.POSIXct(dframe$d, tz="GMT", format="%Y.%M.%D %H:%M:%S")
> str(dframe)

    'data.frame':   424 obs. of  2 variables:
     $ d: POSIXct, format: NA NA NA NA ...
     $ h: num  30 33.3 35.6 35.6 48.9 48.9 48.9 47.8 46.7 46.7 ...

欢迎任何建议。我知道rubridate,但至少会在一段时间内没有尝试过。

1 个答案:

答案 0 :(得分:1)

尝试lubridate

Multithreaded BLAS/LAPACK libraries detected. Using 8 cores for math algorithms.
> library(lubridate)

Attaching package: ‘lubridate’

The following object is masked from ‘package:base’:

    date

> ymd_hms("2016.08.02 03:59:45")
[1] "2016-08-02 03:59:45 UTC"
> str(ymd_hms("2016.08.02 03:59:45"))
POSIXct[1:1], format: "2016-08-02 03:59:45"

“我知道rubridate,但不会尝试它,至少有一段时间。” - 有没有理由你不想/不能使用lubridate?这似乎很容易解决。

修改

今天我在工作上很无聊,所以我决定再拍一次。你的POSIXct函数失败的原因主要是因为“。”你有分离者。快速解决方法是使用gsub替换那些“。”用“ - ”。这是一个例子:

> s = c("2016.08.02 03:59:45", "2016.08.02 04:11:16", "2016.08.02 04:22:45", "2016.08.02 04:34:13")
> dates = as.POSIXct(gsub(pattern="\\.", replacement="-", x=s)) 
> print(dates)
[1] "2016-08-02 03:59:45 PDT" "2016-08-02 04:11:16 PDT"
[3] "2016-08-02 04:22:45 PDT" "2016-08-02 04:34:13 PDT"