Мне тяжело с этим ... Поэтому я пытаюсь найти точки в группе, которые близки друг к другу, и, кроме того, сгруппировать их. Позвольте мне объяснить вам на основе приведенных ниже примеров:
Group X Y Z
1 110 3762 431 10
2 112 4950 880 10
3 113 5062 873 20
4 113 5225 874 30
5 113 5262 875 10
6 113 5300 874 20
structure(list(Group = c(110, 112, 113, 113, 113, 113), X = c(3762,
4950, 5062, 5225, 5262, 5300), Y = c(431, 880, 873, 874, 875,
874), Z = c(10, 10, 20, 30, 10, 20)), row.names = c(NA, -6L), class = "data.frame")
Как мы видим, у нас есть столбец группировки Группа , X & Y Столбцы - это наши координаты, а Z Столбец должен быть дальше суммируется, когда точки определены как «близкие» (евклидово расстояние <100). </p>
Что я пробовал:
Я успешно вычислил евклидово расстояние между точками, используя эту функцию:
for(i in 1:nrow(test)) {
if(i > 1 && test$Group[i] == test$Group[i-1]) {
test$Distance[i] <- sqrt(((test$X[i] - test$X[i-1]) ^ 2) + ((test$Y[i] - test$Y[i-1]) ^ 2))
} else {
test$Distance[i] <- NA
}
}
Что дает мне это:
Group X Y Z Distance
1 110 3762 431 10 NA
2 112 4950 880 10 NA
3 113 5062 873 20 NA
4 113 5225 874 30 163.00307
5 113 5262 875 10 37.01351
6 113 5300 874 20 38.01316
И здесь все усложняется, поскольку для каждой группы есть NA для первого ряда и т. Д.
Чего я хочу достичь:
Я бы хотел найти баллы для каждой группы, чтобы их расстояние не превышало 100 ( Расстояние <100), и на основании этого суммируйте его (простая сумма <em>Z столбец). Итак, сделано вручную:
Group Z Grouped
1 110 10 no
2 112 10 no
3 113 20 no
4 113 60 yes
Спасибо за помощь!