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

时间:2018-05-22 16:45:03

标签: r postgresql

我已经计算了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循环或应用函数,但我找不到它......

提前感谢您的回答。

1 个答案:

答案 0 :(得分:1)

使用纯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;