lui*_*lui 4 performance r subset xts data.table
有没有更好的方法来实现以下代码:
slice.periods <- function (x, periods, ...)
{
if (!require("xts")) {
stop("Need 'xts'")
}
Reduce(rbind.xts, lapply(periods, function(t) x[t], ...))
}
Run Code Online (Sandbox Code Playgroud)
其中 x 是一个 xts 对象,periods 是一个可通过 xts 子集识别的可迭代宪章列表。示例用法:
j <- xts(rnorm(10e6),Sys.time()-(10e6:1))
v <- c("T10:00/T11:00", "T13:00/T15:00", "T20:30/T22:00")
system.time(slice.periods(j, v))
## result on my MacBook Air (1.8 GHz Intel Core i7; 4 GB 1333 MHz DDR3)
## user system elapsed
## 14.956 0.876 15.837
Run Code Online (Sandbox Code Playgroud)
有几个顾虑:
我看到一些帖子说,如果时间是 UTC,直接访问会有一些惊人的加速,请参阅以下帖子: data.table 时间子集 vs xts 时间子集
但是,我的应用程序需要使用夏令时的本地时区。这使得夏季和冬季之间的 UTC 小时转换不同,上述方法将不起作用。
我还考虑使用 data.table,因为我使用“rbindlist”替换 do.Call(rbind, ...) 或 Reduce(rbind, ...) 时有一些出色的性能。同样,data.table 有一些我不熟悉的很酷的子集功能。另一方面,rbindlist 和 as.data.table 不会将 xts 对象作为输入,我不确定将 data.table 用于时间序列数据子集是否是一个不错的选择。
如果有其他想法,我愿意尝试。提前感谢很多人。
如果瓶颈是rbind.xts,则此解决方案会更快,但瓶颈是一天中的时间子集。
jv <- j[unlist(lapply(v, function(i) j[i, which.i=TRUE])),]
Run Code Online (Sandbox Code Playgroud)
非 UTC 时区中的时间子集很慢,因为 xts 当前将POSIXct索引转换POSIXlt为一年中的某一天。
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |