Использование очень простых данных:
siteId <- c(1,1,2,2)
lats <- c(123, 124, 567, 568)
lons <- c(321, 320, 765, 876)
df <- data.frame(siteId, lats, lons)
df1 <-aggregate(df,by=list(siteId), FUN=mean, na.rm=TRUE)
df2 <-aggregate(df,by=list(siteId), FUN=min, na.rm=TRUE)
df3 <-aggregate(df,by=list(siteId), FUN=max, na.rm=TRUE)
первый вывод (df1) даст вам набор координат, который рассчитывается как среднее значение всех вариаций координат для каждого участка.
Второй вывод (df2) даст вам набор координат, который рассчитывается как минимум всех вариантов для каждого сайта.
Второй вывод (df2) даст вам набор координат, который рассчитывается как максимум всех вариаций для каждого сайта.
Надеюсь, это поможет.