我有一个大型数据框,其中包含一列日期和时间,格式为iso8601(YYYY / MM / DDTHH:MM:SSz)。我正在尝试添加新列并更改时区。我正在使用的代码行如下。
df <-cbind(as.POSIXct(df$DateTime, tz = "America/Chicago","%Y-%m-%d %H:%M:%S"),df)
当我使用此代码时,我的新列仅为我提供“ NA”值。我在做什么错了?
编辑:这是我调用它时数据框中的前5个条目:
df$DateTime[1:5]
输出为
df$DateTime[1:5]
[1] "2018/06/01T05:01:13z" "2018/06/01T05:04:11z" "2018/06/01T05:05:31z" "2018/06/01T05:06:51z" "2018/06/01T05:08:11z"
现在,当我按照建议使用strptime时,我的下一行看起来像
df1<-as.data.frame(c(strptime(df$DateTime,format='%Y/%m/%dT%H:%M:%S',tz="America/Chicago"),df))
我得到这个错误
Error in as.POSIXct.default(X[[i]], ...) :
do not know how to convert 'X[[i]]' to class “POSIXct”
答案 0 :(得分:0)
您可以使用lubridate
包将字符向量转换为datetime
对象:
df <- data.frame(DateTime_str = c("2018/06/01T05:01:13z",
"2018/06/01T05:04:11z" ,
"2018/06/01T05:05:31z",
"2018/06/01T05:06:51z",
"2018/06/01T05:08:11z"))
library(lubridate)
df$DateTime <- as_datetime( gsub("z", "", df$DateTime_str), tz = "America/Chicago")
df$DateTime
# [1] "2018-06-01 00:01:13 CDT" "2018-06-01 00:04:11 CDT" "2018-06-01 00:05:31 CDT" "2018-06-01 00:06:51 CDT" "2018-06-01 00:08:11 CDT"