【问题标题】:Trying to map timestamps to dates in R data frame尝试将时间戳映射到 R 数据框中的日期
【发布时间】:2013-07-31 18:51:02
【问题描述】:

我有一个数据框df,其中有一列time,其中包含时间戳和一个函数from.timestamp

from.timestamp = function(timestamp) {
  return(as.POSIXlt(timestamp/1e3, origin="1970-01-01 00:00:00 GMT"))
}

将时间戳转换为日期类型。如何修改数据框以便将所有时间戳转换为日期?

我的方法

我正在尝试以下方法:

df$time <- apply(as.array(df$time), MARGIN=1, FUN=from.timestamp)

time 的结果列条目看起来不像日期,而是一个数字序列,例如 1.034, 59.000, 23.000, 7.000, 5.000, 113.000, 5.000, 157.000, 1.000

dput(df) 给出:

structure(list(time = c(1370674741034, 1372671995085, 1370847555008, 1371456058556, 1372570911379, 1371937835807)), .Names = "time", row.names = 8831395:8831400, class = "data.frame")

【问题讨论】:

  • as.POSIXlt 是矢量化的,所以 df$time &lt;- from.timestamp(df$time) 应该可以工作。
  • 如果你想要日期,使用as.Date。如果您需要时间,请使用as.POSIXct。不要转换为POSIXlt,除非您需要提取组件(小时、分钟等)。不要将POSIXltdata.frame 一起使用,因为它是一个比POSIXct 更慢且使用更多内存的列表。
  • 如果有人能写出一个提到矢量化或transform 的答案并解释我在apply 中观察到的行为,那就太好了。
  • @Peteris 如果您编辑了您的问题以包含 dput(head(df)) 的输出 - 即使您的问题中的代码可重现 - 这将更容易回答。

标签: r dataframe


【解决方案1】:

做事

df$time <- from.timestamp(df$time)

出现这种奇怪行为的原因是因为 POSIXlt 对象实际上是列表,其中包含年、月、日等组件。在您的代码中,applyfrom.timestamp 接收一系列列表,它组合成一个列表。这样做时,它会从结果中去除类信息,这就是您看到奇数的原因。这些奇数实际上是代表该日期时间的 POSIXlt 对象的各个组成部分:秒、分钟、小时、月中的某天、月、年、工作日、年中的某天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2021-12-31
    • 2014-06-08
    相关资源
    最近更新 更多