【发布时间】:2016-10-26 17:28:19
【问题描述】:
我有一个大型数据集(200 万行),其中每行代表一个点,其空间坐标以米为单位(x 和 y)及其分数。它看起来像这样:
my_points <- data.frame(ID = 1:2e6,
x = sample(x = 1:1e6, size = 2e6, replace = TRUE),
y = sample(x = 1:1e6, size = 2e6, replace = TRUE),
Score = sample(x = 1:1e3, size = 2e6, replace = TRUE))
head(my_points)
# ID x y Score
# 1 21984 628151 54
# 2 675714 27715 431
# 3 273248 127287 47
# 4 659750 795394 921
# 5 478142 417083 416
# 6 783249 440782 253
所有点都位于一个大区域(1000 x 1000 公里)内。
我正在尝试在半径 100 米内找到得分最高的点组。
到目前为止,我已经尝试了两种解决方案,但没有一个能够处理这么多数据(即使使用并行计算或data.table 包):
第一种解决方案:
我已经建立了一个覆盖所有空间的空间网格。我为网格选择了一小步(10 米),以确保收集所有可能的解决方案。对于网格的每个点,我将距离小于 100 米的点的得分相加。 这个解决方案需要太多时间(在我的电脑上可能需要数周或数月)...
第二个解决方案
我已经构建了一个函数,对于一对 (x, y),返回包含在中心 (x, y) 和半径 100 米的圆内的分数。 我试图找到这个函数的最大值,但我无法为这种非连续函数找到合适的方法......
关于更快的解决方案(不到一天)的任何想法?
【问题讨论】:
标签: r