Найти x минимальных значений в матрице расстояний в R - PullRequest
0 голосов
/ 22 мая 2018

Я вычислил матрицу расстояний между участками древних и недавних лесов в 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 пар древних лесов (а) / недавний лес (б) представляют минимальное расстояние между ними.

Итак, я начал работать с R, и я могу найти уникальную пару, представляющую минимальное расстояние, благодаря следующемукод:

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

Но как мне вычислить 5 первых пар?Это, вероятно, легко, с циклом for или функцией apply в R, но я не могу его найти ...

Заранее спасибо за ваши ответы.

1 Ответ

0 голосов
/ 22 мая 2018

Использование чистого 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...