由于下面的代码,我在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函数可能很容易,但是我找不到它...
预先感谢您的回答。
使用纯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] 删除。
我来说两句