【发布时间】:2012-02-15 21:07:18
【问题描述】:
我有一个大数据框(名为 z),如下所示:
RPos M1
1 -0.00020
2 0.00010
3 -0.00012
4 -0.00035
5 -0.00038
...etc (about 300,000 observations)
它本质上是一个时间序列(虽然它实际上是一个数据框,而不是ts 或zoo)。
其中 RPos 是索引号(显式存储),M1 是任何指标。
我有另一个数据框(名为 actionlist),其中包含大约 30,000 个*非连续观察。 actionlist 的 RPos 列中的每个值代表 34 个连续点中的最后一个。
我的最后一条数据是单个数据框(名为 x),仅包含 34 个连续观察。
我的目标是计算 x 与 actionlist 中每个观察值之间的相关系数(同样,它是 34 个连续观察值的终点)。
为此,我必须从 z(大数据框)生成这些 34 点连续点时间序列片段。
目前,我正在这样做:
n1<-33:0
for(i in 1:nrow(actionlist))
{
crs[i,2]<-cor(z[actionlist$RPos[i]+n1,2],x[,2])
}
当查看 Rprof 读数时,我得到的是:
$by.self
self.time self.pct total.time total.pct
[.data.frame 0.68 25.37 0.98 36.57
.Call 0.22 8.21 0.22 8.21
cor 0.16 5.97 2.30 85.82
...etc
看起来[.data.frame 花费的时间最长。
具体来说,我很确定这是这一部分:
z[actionlist$RPos[i]+n1,2]
我怎样才能加快(消除需要?)这部分功能?
我之前问过一个类似的问题,除了查看限制列表 (actionlist) 之外,我查看了 z 内所有可能的连续 34 次观察。答案已发布here,,但我不知道如何使其适应受限列表。
任何帮助将不胜感激!
【问题讨论】:
-
贴一些可复现的代码和测试数据会更容易帮助到你。
-
此外,如果您在此使用与上一个答案相同的术语,会更容易(尤其是对我而言!)。有什么理由需要
z和x成为data.frames?重复子集不需要的东西是非常浪费的,例如,您可以轻松地将x[,2]置于循环之外,只需在外部执行一次x2 <- x[,2],然后在循环中将该向量称为 @987654335 @。同样,如果Rpos本身只是从1:nrow(z)运行,则根本不需要使用$Rpos[i]进行索引... -
是的,你绝对是对的,以后我会使用一致的术语。我会记住子集的事情。
标签: r dataframe time-series