Мои данные похожи на следующие:
# A tibble: 7 x 3
# Groups: offense [7]
lon lat offense
<dbl> <dbl> <fct>
1 -95.3 29.8 aggravated assault
2 -95.4 29.9 auto theft
3 -95.3 29.8 burglary
4 -95.5 29.7 murder
5 -95.4 30.0 rape
6 -95.5 29.8 robbery
7 -95.4 29.8 theft
Я могу запустить следующее
cbind(df, X = rowSums(distm(df[,1:2], fun = distHaversine) / 1000 <= 10))
# A tibble: 7 x 4
# Groups: offense [7]
lon lat offense X
<dbl> <dbl> <fct> <dbl>
1 -95.3 29.8 aggravated assault 3
2 -95.4 29.9 auto theft 2
3 -95.3 29.8 burglary 3
4 -95.5 29.7 murder 1
5 -95.4 30.0 rape 2
6 -95.5 29.8 robbery 1
7 -95.4 29.8 theft 3
Что дает мне количество точек в радиусе 10 км в соответствии с этим SO post .
Что я хотел бы знать, так это то, как изменить эту функцию, чтобы дать мне строки, которые соответствуют каждой точке в радиусе. Первая строка имеет значение 3
, это значение может состоять из наблюдения, например, из строк 2
, 4
и 7
.
Может выглядеть так:
lon lat offense X points
1 -95.3 29.8 aggravated assault 3 c(2,4,7)
2 -95.4 29.9 auto theft 2 c(2,3)
3 -95.3 29.8 burglary 3 c(4,5,7)
Получив эти списки, я хотел бы создать списки, в которых строка 1
будет списком, содержащим списки 1
, 2
, 4
и 7
. (Однако это может быть другой вопрос)
Данные:
library(geosphere)
library(ggmap)
df <- crime %>%
group_by(offense) %>%
sample_n(1) %>%
select(lon, lat, offense)