Объединить фрейм данных с долготой и широтой и файлом формы - PullRequest
0 голосов
/ 09 мая 2019

У меня есть фрейм данных, в котором есть информация о преступлениях (переменная x), а также широта и долгота, где произошло это преступление.У меня есть файл формы с районами из города Сан-Паулу.Мне нужно объединить эти две данные, чтобы я мог получить количество преступлений по районам.Есть ли способ сделать это?Я преобразовал свой фрейм данных в фрейм пространственных данных, используя

df.sp <- SpatialPointsDataFrame(cbind(df$longitude,df$latitude ), df)

, но я не знаю, как реализовать этот вид слияния, чтобы получить то, что мне нужно.На DF у меня есть более 10 тысяч единиц, таких как:

    latitude  longitude  n_homdol
1    -23.6     -46.6     1
2    -23.6     -46.6     1
3    -23.6     -46.6     1
4    -23.6     -46.6     1
5    -23.6     -46.6     1
6    -23.6     -46.6     1

Файл формы выглядит следующим образом:

                       geometry      NOME_DIST
1 POLYGON ((352436.9 7394174,... JOSE BONIFACIO
2 POLYGON ((320696.6 7383620,...    JD SAO LUIS
3 POLYGON ((349461.3 7397765,...    ARTUR ALVIM
4 POLYGON ((320731.1 7400615,...        JAGUARA
5 POLYGON ((338651 7392203, 3...  VILA PRUDENTE
6 POLYGON ((320606.2 7394439,...        JAGUARE

Мне нужна сумма n_homdol по районам.Я пытаюсь объединить два фрейма данных, но безуспешно.

1 Ответ

1 голос
/ 09 мая 2019

Если вы хотите переключиться с sp на sf -пакет, у вас будет простой способ выполнить пространственное соединение с dplyr -подобным синтаксисом .: st_join.

Это будет работать так (у меня нет R на этом компьютере, поэтому могут быть некоторые "ошибки")


library(sf)
library(dplyr)

#Instead of data.frame of class "sp", create "simple features"-data.frame 

sf_df = st_as_sf(df, coords = c("longitude", "latitude"), crs = 4326)

#You'll have to convert your shapefile to sf, too. 
#Depending what class it is you can use "st_as_sf()"


#Then join the shapefile with sf_df via the "st_contains" which merges two rows 
#if a point from sf_df falls within a polygon from the shapefile.

shape_df <- st_join(shapefile, sf_df , join = st_contains)

Затем вы можете сделать:

shape_df %>%
group_by(NOME_DIST) %>%
summarise(crime = sum(n_homdol))

Если вы хотите придерживаться sp, я рекомендую посмотреть ответы в ссылке Dave2e в комментариях.

...