以下代码创建一个 10 行数据表,其中包含一个变量 timeStamp,采用 POSIXct 格式。
library(data.table)
dt <- data.table(timeStamp = seq( as.POSIXct("2017-07-01 14:51:50"), by=60, len=10))
我想将时间戳四舍五入到最接近的分钟。
此命令在 timeStamp2 的每一行中放置一个列表,而不是修改后的 POSIXct 变量。
dt[, timestamp2 := round(timeStamp, "mins")]
下面的代码行执行了我想要的操作(在此示例中进行了舍入),但在数据表中不起作用。
timestamp2 <- round(dt$timeStamp, "mins")
我使用的是 data.table 版本 1.10.4-3 和 MRAN R 版本 3.4.1。
最佳答案
来自?round.POSIXt
:
Value
An object of class "POSIXlt" or "Date".
这意味着对 POSIX
对象进行 round
的结果是一个 POSIXlt
对象。
因此,您需要将 round
函数包装在 as.POSIXct()
中,以使其返回到 POSIXct
dt[, timestamp2 := as.POSIXct(round(timeStamp, "mins"))]
关于R 数据表中的 PosixCT 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47403265/