【发布时间】:2014-01-26 03:16:52
【问题描述】:
我正在重新编写一些分析大量数据(约 1700 万行)的 R 脚本,我想我会尝试通过使用 data.table 包来提高它的内存效率(我只是在学习! )。
代码的一部分让我有点困惑。我无法发布我的原始解决方案,因为 (1) 它是垃圾(慢!),并且 (2) 它在数据方面非常细微,只会使这个问题复杂化。
相反,我做了这个玩具示例(它确实是一个玩具示例):
ds <- data.table(ID=c(1,1,1,1,2,2,2,3,3,3),
Obs=c(1.5,2.5,0.0,1.25,1.45,1.5,2.5,0.0,1.25,1.45),
Pos=c(1,3,5,6,2,3,5,2,3,4))
看起来像这样:
ID Obs Pos
1: 1 1.50 1
2: 1 2.50 3
3: 1 0.00 5
4: 1 1.25 6
5: 2 1.45 2
6: 2 1.50 3
7: 2 2.50 5
8: 3 0.00 2
9: 3 1.25 3
10: 3 1.45 4
为了便于解释,我假设我们正在观察火车(每辆火车都有自己的ID),在一条线性单向轨道上移动,观察(一些价值,而不是导入问题)关于火车在沿轨道的设定位置(pos,此处为 1-6)。预计一列火车不会将其延伸到轨道的整个长度(可能在到达位置 6 之前就爆炸了),有时观察者会错过观察......位置是连续的(因此,如果我们错过了观察火车在 4 号位置,但我们在 5 号位置观察到它,我们知道它必须经过 4 号位置。
从上面的data.table,我需要生成一个这样的表:
Pos Count
1: 1 3
2: 2 3
3: 3 3
4: 4 3
5: 5 2
6: 6 1
对于我的 data.table ds 中的每个唯一 Pos,我计算了到达轨道上该位置(或更远)的火车数量,无论观察是否是在赛道上的那个位置制作的。
如果有人对如何解决此问题有任何想法或建议,将不胜感激。不幸的是,我对 data.table 不够熟悉,不知道这是否可以做到!或者它可能是非常简单的问题要解决,我只是很慢:)
【问题讨论】:
标签: r data.table