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