在R中的距离矩阵中找到x个最小值

索菲

由于下面的代码,我在PostgresSQL中计算了古代森林和最近森林之间的距离矩阵:

CREATE TABLE MatDist as (
SELECT
  a.id a,
  b.id b ,
  st_distance(a.geom, b.geom) dist
FROM public.bvi_foret a, public.bvi_foret b
WHERE a.id != b.id AND a.ANC_FOR != b.ANC_FOR
)

而且效果很好。

我现在要选择5对古森林(a)/最近森林(b),它们之间的距离最短。

因此,我开始使用R,由于以下代码,我可以找到呈现最小距离的唯一对:

DT <- data.table(df)
DT[ , .SD[which.min(dist)], by = a]

但是如何计算前5对?在R中使用for循环或apply函数可能很容易,但是我找不到它...

预先感谢您的回答。

卢卡斯·索兹达(Lukasz Szozda)

使用纯SQL:

SELECT *
FROM MatDistMat
ORDER BY dist
LIMIT 5;

感谢您的回答,但是对于每个古代森林,我需要5对第一对FA / FR。

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY a ORDER BY dist ASC) as rn
     FROM MatDistMat) sub
WHERE sub.rn <= 5;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章