- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 data.tables 的新手,所以如果这是一个非常基本的问题,我深表歉意。
我听说 data.tables 在处理大量数据时显着提高了计算时间,因此想看看 data.table 是否能够帮助加快 rollapply 函数的速度。
如果我们有一些单变量数据
xts.obj <- xts(rnorm(1e6), order.by=as.POSIXct(Sys.time()-1e6:1), tz="GMT")
colnames(xts.obj) <- "rtns"
宽度为 100、p 为 0.75 的简单滚动分位数需要非常长的时间...
即代码行
xts.obj$quant.75 <- rollapply(xts.obj$rtns,width=100, FUN='quantile', p=0.75)
似乎需要永远......
data.table 可以做些什么来加快速度吗?即是否有可以应用的通用滚动功能?
也许有一个例程,可以将 xts 对象转换为 data.table 对象,以加速方式执行该功能,然后在最后重新转换回 xts?
提前致谢
HLM
附:我似乎在 data.table 邮件列表上没有得到太多回复,所以我在这里发帖,看看是否能得到更好的回复。
快速浏览另一个使用数据帧的示例,data.table 解决方案似乎比 rollapply 函数花费更长的时间,如下所示:
> x <- data.frame(x=rnorm(10000))
> x.dt <- data.table(x)
> system.time(l1 <- as.numeric(rollapply(x,width=10,FUN=quantile,p=0.75)))
user system elapsed
2.69 0.00 2.68
> system.time(l <- as.numeric(unlist(x.dt[,lapply(1:((nrow(x.dt))-10+1), function(i){ x.dt[i:(i+10-1),quantile(x,p=0.75)]})])))
user system elapsed
11.22 0.00 11.51
> identical(l,l1)
[1] TRUE
最佳答案
datatable 在这里是完全无关紧要的 - 你本质上是在向量上运行 sapply
,这几乎是你可以获得的最快的操作(除了转到 C)。数据帧和数据表总是比向量慢。您可以通过使用直接向量(无需 xts 调度)获得一些好处,但快速完成此操作的唯一简单方法是并行化:
> x = as.vector(xts.obj$rtns)
> system.time(unclass(mclapply(1:(length(x) - 99),
function(i) quantile(x[i:(i + 99)], p=0.75), mc.cores=32)))
user system elapsed
325.481 15.533 11.221
如果您需要更快,那么您可能需要编写一个专门的函数:简单的 apply 方法会对每个 block 重新排序,这显然是浪费 - 您所需要做的就是删除一个元素并在下一个元素中排序一个获得分位数,所以如果你这样做,你可以预期大约 50 倍的加速 - 但你必须自己编写代码(所以只有当你更频繁地使用它时才值得......)。
关于r - 使用 data.table 加速 rollapply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150472/
我有一个数据集,其中的观测值间隔不等,而且观测值每天发生不止一次。我想对我的数据窗口应用一个函数,但我希望窗口按时间而不是按行定义。例如,我想计算数据集中第 1-5 天、第 2-6 天等的平均值,第
我正在尝试使用 rollapply 以便我只使用它一次,而不是多次使用然后合并结果。这个想法是我想从 xts 对象中获取多位数据。在下面的模拟示例中,我希望能够获得滑动窗口的总和和最大值。 requi
我想使用滚动窗口生成协方差矩阵(和均值向量)。但在我所有的尝试中 rollapply堆叠来自 cov 的协方差矩阵并且用完预分配的空间(例如,如果我的原始数据有 40 个观察值,那么 rollappl
我正在尝试计算移动窗口的一些统计数据,并在 zoo 包中使用 rollapply。我的问题是如何让 rollapply 将该函数应用于前 n 次观测而不是当前观测和前 n-1 次观测,因为 ali
# Loading packages require(forecast) require(quantmod) # Loading OHLC xts object getSymbols('SPY', f
我有一个大型数据库,我已将其拆分为多个文件。每个文件都保存在同一个目录中,命名方案中有一个数字序列,以保持数据库的顺序。我这样做是为了减少加载和操作数据库所需的时间和内存。我想按顺序开始分析数据库,我
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案、它们为什么不起作用以及预期结果。另
我有 10000+ 行的动物园对象。 > head(tt) A B 2007-01-04 0.005945924 0.00211
我正在寻找一种使用 rollapply 将系列拆分为 n 个月的序列的方法。假设您有以下内容: z <- zoo(101:465, as.Date(1:365)) as.data.frame(z) 我
我正在通过 quantmod 研究一些雅虎财务数据。 我如何不仅确定数据滚动窗口中的最高和最低价格,而且还确定这些高点和低点的确切时间戳?我已经尝试使用 rollapply 尝试 which.max(
我正在尝试从满足特定条件的向量中提取一系列值。为了说明这一点,想象一下我有以下向量: a limit) {ctr = ctr+1} else {ctr} } res <- res[!sapp
我正在寻找一种使用 rollapply 将系列拆分为 n 个月的序列的方法。假设您有以下内容: z <- zoo(101:465, as.Date(1:365)) as.data.frame(z) 我
我有一列每小时数据,想使用 rollapply 计算每小时的 24 小时滚动平均值。我的数据包含 NA,如果 24 小时内 75% 的数据可用,我只想计算滚动平均值,否则我希望考虑 24 滚动平均值
require(quantmod) require(PerformanceAnalytics) getSymbols('INTC') x<- monthlyReturn(INTC) rollapply
是否有使用 data.table 分组计算滚动统计数据的现有习惯用法? 例如,给定以下代码: DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3
我有一个 rollapply 函数,它可以做一些非常简单的事情,但是超过百万个数据点这个简单的函数非常慢。我想知道是否可以向 rollapply 提供有关如何进行下一次转换的信息,而不是定义函数本身。
我的第一个问题:) 我的目标是:给定一个带有预测变量的数据框(每列一个预测变量/行观察值)使用 lm 拟合回归,然后使用滚动窗口使用最后一个观察值来预测值。 数据框如下所示: > DfPredicto
我有一个 rollapply 函数,它可以做一些非常简单的事情,但是超过百万个数据点这个简单的函数非常慢。我想知道是否可以向 rollapply 提供有关如何进行下一次转换的信息,而不是定义函数本身。
我设计了自己的函数,名为 SharpeRatio(data) 其中 data 是一个 nx2 矩阵。 该函数适用于给定的矩阵数据,但是当我尝试使用 rollapply(dat, 20, SharpeR
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Can `ddply` (or similar) do a sliding window? 是否有像 rollapp
我是一名优秀的程序员,十分优秀!