gpt4 book ai didi

r - data.table 时间子集 vs xts 时间子集

转载 作者:行者123 更新时间:2023-12-04 18:44:37 25 4
gpt4 key购买 nike

嗨,我希望按时间对一些精细数据进行子集化。我通常使用 xts做类似的事情:

subset.string <- 'T10:00/T13:00' 
xts.min.obj[subset.string]

获取每天上午 10 点到下午 1 点(含)之间的所有行,并将输出作为 xts 格式。但是对于我的目的来说有点慢......例如
j <- xts(rnorm(10e6),Sys.time()-(10e6:1))
system.time(j['T10:00/T16:00'])
user system elapsed
5.704 0.577 17.115

我知道 data.table速度很快,并且可以对大型数据集进行子集化,所以我想知道是否与 fasttime 结合使用处理快速 POSIXct 创建的包,如果创建一个函数是值得的
dt.time.subset <- function(xts.min.obj, subset.string){
require(data.table)
require(fasttime)
x.dt <- data.table(ts=format(index(xts.min.obj),"%Y-%m-%d %H:%M:%S %Z"),
coredata(xts.min.obj))
out <- x.dt[,some.subsetting.operation.using."%between%"]
xts(out,fastPOSIXct(out[,ts])
}

将 xts.min.obj 转换为 data.table 添加某种字符索引,然后使用 data.table 对相关行进行子集使用带有 fasttime 的输出行索引重新创建 xts 输出?或者对于已经高度优化并用 C 编写的东西来说,这是否有太多多余的操作?

最佳答案

如果您同意在 UTC 中指定您的范围, 你可以做:

j[(.index(j) %% 86400) %between% c(10*3600, 16*3600 + 60)]
# +60 because xts includes that minute; you'll need to offset the times
# appropriately to match with xts unless you live in UTC :)

j <- xts(rnorm(10e6),Sys.time()-(10e6:1))
system.time(j[(.index(j) %% 86400) %between% c(10*3600, 16*3600 + 60)])
# user system elapsed
# 1.17 0.08 1.25
# likely faster on your machine as mine takes minutes to run the OP bench

关于r - data.table 时间子集 vs xts 时间子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17345951/

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