R - 在导入的 csv 文件中从 chr 到 POSIXct date/time 格式的转换以 N/A 结尾
R - conversion from chr to POSIXct date/time format in imported csv file ends in N/A
我导入了一个带有时间戳和值的 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 ...
欢迎提出任何建议。我知道 lubridate 但至少暂时不会尝试。
尝试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"
"I am aware of lubridate but will not be trying it, for a while at least." -- 您不想 to/can 不使用 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"
我导入了一个带有时间戳和值的 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 ...
欢迎提出任何建议。我知道 lubridate 但至少暂时不会尝试。
尝试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"
"I am aware of lubridate but will not be trying it, for a while at least." -- 您不想 to/can 不使用 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"