gpt4 book ai didi

r - 使用 POSIXct 算法在 data.table 中显示错误的单位

转载 作者:行者123 更新时间:2023-12-04 09:33:13 24 4
gpt4 key购买 nike

在 data.table (v1.9.2) 中计算持续时间时,可以使用 POSIXct 算法打印错误的单位。似乎选择了第一批单位。

require("data.table")
dt <- data.table(id=c(1,1,2,2),
event=rep(c("start", "end"), times=2),
time=c(as.POSIXct(c("2014-01-31 06:05:30",
"2014-01-31 06:45:30",
"2014-01-31 08:10:00",
"2014-01-31 09:30:00"))))
dt$time[2] - dt$time[1] # in minutes
dt$time[4] - dt$time[3] # in hours
dt[ , max(time) - min(time), by=id] # wrong units printed for id 2

我意识到其中之一是获得预期行为的正确方法,但我想报告此行为。不确定它是否真的是 data.table 问题或 POSIXct 问题。

dt[ , difftime(max(time), min(time), units="mins"), by=id]  # both in mins
dt[ , difftime(max(time), min(time), units="hours"), by=id] # both in hours

最佳答案

如果你这样做,你会得到预期的结果

dt[ , list(c(max(time) - min(time)),attr(max(time) - min(time),"units")), by=id]

c() 放在时间操作周围会消除该属性,因此您只需获得一个数字,然后明确要求 "units" 属性作为另一个列表元素本身在其自己的列中获得适当的单位。如果不这样做就无法工作的原因是 data.table 不会将属性解析为其他列,这就是 POSIXct 返回单位的方式。


来自马特:

+1 只是为了增加一个小的速度改进来保存 max(time)-min(time) 两次:

dt[ , list(c(d<-max(time) - min(time)), attr(d,"units")), by=id]
id V1 V2
1: 1 40.000000 mins
2: 2 1.333333 hours

至少开始时,我想我们会添加一个跨组结果的不一致属性检查,然后发出警告/错误。因此无论如何都可能需要此解决方案(或问题中的解决方案)。

关于r - 使用 POSIXct 算法在 data.table 中显示错误的单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25214170/

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