gpt4 book ai didi

r - 为什么这个 POSIXct 或 ITime 会丢失其格式/属性

转载 作者:行者123 更新时间:2023-12-02 11:38:45 28 4
gpt4 key购买 nike

这是我的示例数据,我不明白为什么使用 data.table 包的以下代码中的 ITime 列会丢失其格式

DT = data.table(x=as.POSIXct(c("2009-02-17 17:29:23.042",
"2009-02-17 17:29:25.160")),
y=c(1L,2L))
DT[,x1:=as.ITime(x)]
DT[,`:=`(last.x=tail(x,1L),last.x1=tail(x1,1L)),by=y]
DT
x y x1 last.x last.x1
1: 2009-02-17 17:29:23.042 1 17:29:23 1234888163 62963
2: 2009-02-17 17:29:25.160 2 17:29:25 1234888165 62965

但是如果data.table已经知道如下所示的格式,它就可以工作

DT = data.table(x=as.POSIXct(c("2009-02-17 17:29:23.042",
"2009-02-17 17:29:25.160")),
y=c(1L,2L))
DT[,x1:=as.ITime(x)]
DT[,`:=`(last.x=x,last.x1=x1)] #HERE DATA>TABLE KNOWS THE LAST.* FORMAT
DT[,`:=`(last.x=tail(x,1L),last.x1=tail(x1,1L)),by=y]
R) DT
x y x1 last.x last.x1
1: 2009-02-17 17:29:23.042 1 17:29:23 2009-02-17 17:29:23.042 17:29:23
2: 2009-02-17 17:29:25.160 2 17:29:25 2009-02-17 17:29:25.160 17:29:25

这一定是关于data.table如何分配的问题,有解决办法吗?

更新感谢 Arun,这个问题现已修复

R) library(data.table)
data.table 1.8.11 For help type: help("data.table")
R) DT = data.table(x=as.POSIXct(c("2009-02-17 17:29:23.042",
+ "2009-02-17 17:29:25.160")),
+ y=c(1L,2L))
R) DT[,x1:=as.ITime(x)]
R) DT[,`:=`(last.x=tail(x,1L),last.x1=tail(x1,1L)),by=y]
R) DT
x y x1 last.x last.x1
1: 2009-02-17 17:29:23.042 1 17:29:23 2009-02-17 17:29:23.042 17:29:23
2: 2009-02-17 17:29:25.160 2 17:29:25 2009-02-17 17:29:25.160 17:29:25

最佳答案

更新:此问题已在 v1.8.11 中修复。来自 NEWS :

:= (assignment by reference) loses POSIXct or ITime attribute while grouping is now fixed, #2531. Tests added. Thanks to stat quant for reporting here: Why does this POSIXct or ITime loses its format/attribute and to Paul Murray for reporting here on SO: Cannot assign columns as.Date by reference in data.table

如果我似乎忽略了某些内容,请回信。

关于r - 为什么这个 POSIXct 或 ITime 会丢失其格式/属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com