使用 as.POSIXct 将时间序列 df 从 chr 转换为日期时出现问题

问题描述 投票:0回答:1

我是 R studio 和堆栈溢出的新手,因此对于发布此问题时出现的任何错误,我提前表示歉意。我正在从政府网站导入大型高分辨率时间序列水文数据集作为 csv 文件。列“x.Timestamp”作为 chr 导入,其中包含一些不寻常的字符,但是当我尝试将其从 chr 转换为日期时,返回 NA。如果有任何帮助,我将非常感激。

library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
OW_HR_Discharge_DataV2<- data.frame(
  stringsAsFactors = FALSE,
  X.Timestamp = c("1 1955-11-08T00:00:00.000Z",
                  "2 1955-11-08T00:15:00.000Z","3 1955-11-08T00:30:00.000Z",
                  "4 1955-11-08T00:45:00.000Z",
                  "5 1955-11-08T01:00:00.000Z","6 1955-11-08T01:15:00.000Z"),
  Value = c(10.227, 10.226, 10.228, 10.227, 10.227, 10.227),
  Quality.Code = c(31L, 31L, 31L, 31L, 31L, 31L)
)
str(OW_HR_Discharge_DataV2)
#> 'data.frame':    6 obs. of  3 variables:
#>  $ X.Timestamp : chr  "1 1955-11-08T00:00:00.000Z" "2 1955-11-08T00:15:00.000Z" "3 1955-11-08T00:30:00.000Z" "4 1955-11-08T00:45:00.000Z" ...
#>  $ Value       : num  10.2 10.2 10.2 10.2 10.2 ...
#>  $ Quality.Code: int  31 31 31 31 31 31
OW_HR_Discharge_DataV2$X.Timestamp<-as.POSIXct(OW_HR_Discharge_DataV2$X.Timestamp, format = "%Y-%m-%d %H:%M:%S", tz="GMT")
str(OW_HR_Discharge_DataV2)
#> 'data.frame':    6 obs. of  3 variables:
#>  $ X.Timestamp : POSIXct, format: NA NA ...
#>  $ Value       : num  10.2 10.2 10.2 10.2 10.2 
...
#>  $ Quality.Code: int  31 31 31 31 31 31
datetime type-conversion lubridate
1个回答
0
投票

您的

X.Timestamp
不包含传递给
as.POSIXct
参数的格式。在“1 1955-11-08T00:00:00.000Z”中,开头有一个多余的“1”。此代码有效:

OW_HR_Discharge_DataV2$X.Timestamp2 <- as.POSIXct(sapply(strsplit(OW_HR_Discharge_DataV2$X.Timestamp, " "),
                                                         function (x) x[[2]]),
                                                  tz = "GMT")
OW_HR_Discharge_DataV2
© www.soinside.com 2019 - 2024. All rights reserved.