【问题标题】:Converting UNIX timestamp to POSIXct in R在 R 中将 UNIX 时间戳转换为 POSIXct
【发布时间】:2021-02-11 09:28:47
【问题描述】:

我正在尝试将包含 UNIX 值(整数)的 hadoop 数据中的列转换为 R 中的 POSIXct 格式。我正在使用以下代码:

hadoop$time <- as.POSIXct(hadoop$time, origin="1970-01-01")

但是,当我使用 as.POSIXct 时,出现以下错误:

Error in as.POSIXct.default(hadoop$time, origin="1970-01-01") : do not know how to convert 'hadoop$time' to class "POSIXct" 

我的列时间值示例如下:

integer64
    [1] 1606851081 1606851075 1606851065 1606850993 1606850976 1606823547

如果我通过 Epoch 日期转换器输入这些值之一,它会返回一个有效的日期时间。我已经尝试过这里发布的多种解决方案,例如使用“as_datetime”函数或“anytime”包。示例代码:

hadoop$time <- anytime(hadoop$time)
hadoop$time <- as_datetime(hadoop$time)

但是,这些尝试也没有成功。不知道我在这里做错了什么,希望有人能帮助我。

一些添加的上下文:我在 Databricks 的笔记本中运行它。

【问题讨论】:

  • 您使用的是as.POSIXct(x, origin="1970-01-01") 还是真的as.POSIXct.default(x, origin="1970-01-01")?一般来说,你应该在 Stack Overflow 上提出 reproducible 的问题,请阅读:stackoverflow.com/a/5963610/6574038
  • 嗨@jay.sf,感谢您指出这一点。我已经相应地编辑了我的问题。希望这能让它更清楚。
  • 我确定您忽略了链接中的可重现数据部分。只需使用 dput 提供您的 integer64 向量。

标签: r datetime-format unix-timestamp


【解决方案1】:

没有可重现的代码,因此答案也不会提供工作示例。 将 UNIX 纪元时间转换为 POSIXct 只是更改其类属性。假设起源于 1970-01-01。

因此,无论您拥有哪种 UNIX 纪元,只需将​​其强制转换为数字,然后将其转换为 as.POSIXct(num, origin="1970-01-01")

int64_epoch = bit64::as.integer64(1606851081)
num_epoch = as.numeric(int64_epoch)
as.POSIXct(num_epoch, origin="1970-01-01")
#[1] "2020-12-01 21:31:21 EET"

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2013-12-14
    • 2013-04-07
    • 2018-07-30
    • 1970-01-01
    • 2023-03-18
    • 2020-07-29
    • 2010-10-25
    相关资源
    最近更新 更多