Эффективный метод минимального расстояния между повторными измерениями данных x и y - PullRequest
0 голосов
/ 07 августа 2020

У меня есть данные 2-х координат (задача рисования), которые представляют собой повторяющиеся измерения (group_1 и group_2), и я хочу найти минимальное евклидово расстояние между каждой точкой xy в group_1 по сравнению со всеми точками в group_2. Я делаю это, чтобы оценить повторяемость задачи. Я просмотрел различные потоки SO и смог получить нужные мне результаты:

поддельные данные

df = data.frame(id =rep(c(1:3), each = 20),
            group = rep(c(rep(1, 10), rep(2,10)), times = 3),
            x = rep(c(rnorm(10,5,2),rnorm(10,5,2)), times = 3),
            y = rep(c(rnorm(10,5,2),rnorm(10,5,2)), times = 3),
            # fake key
            k = 1
            )

мой метод:

# Perform the join, remove the key, then create the distance
df %>% 
  group_by(id) %>%
# get all combinations of coordinates for distance calculations
  full_join(df, by = "k") %>% 
# include only meaningful comparisons
  filter(!group.x == group.y, id.x == id.y) %>%
# remove key
  select(-k) %>%
# calculate distance
  mutate(dist = sqrt((x.x - x.y)^2 + (y.x - y.y)^2))  %>%
# mean minimum distance between closest points by id
  group_by(id.x, x.x,y.x) %>%
# min distance for all measures
  summarise(dist.min = min(dist)) %>%
# mean min distance for each id
  group_by(id.x) %>%
  summarise(dist.min.mean = mean(dist.min))

Это не удается (из-за проблем с памятью на моем p c), когда я обрабатываю все свои данные (200 тыс. строк) ... какие-либо предложения по более эффективному методу, который может обрабатывать большие объемы данных?

I думал о разделении данных по идентификатору, обработке результатов отдельно, но я не уверен, как это автоматизировать. Я знаком с пакетом Purr, но не могу заставить его работать.

Спасибо за любую помощь.

...