【问题标题】:How to change timezone from ISO8601 format in data frame in R?如何在 R 的数据框中从 ISO8601 格式更改时区?
【发布时间】:2023-03-17 14:28:01
【问题描述】:

我有一个大型数据框,其中有一列日期和时间采用 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”

【问题讨论】:

  • strptime(df$DateTime,'%Y/%m/%dT%H:%M:%S')
  • 如果您需要更好的帮助,请提供示例日期,df$DateTime 没有它就没有任何意义。

标签: r timezone iso8601


【解决方案1】:

您可以使用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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多