合并具有经度和纬度的数据框以及形状文件
Merge a dataframe with longitude and latitude and a shape file
我有一个数据框,其中包含有关犯罪(变量 x)以及犯罪发生地点的纬度和经度的信息。
我有一个包含圣保罗市各区的形状文件。
我需要合并这两个数据,这样我就可以得到每个地区的犯罪数量 os。有没有办法做到这一点?我使用
在空间数据框中转换了我的数据框
df.sp <- SpatialPointsDataFrame(cbind(df$longitude,df$latitude ), df)
但我不知道如何实现这种合并以获得我需要的东西。在 df 上,我有超过 10,000 个 obs,例如:
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 按地区划分的总和。我正在尝试合并这两个数据框,但没有成功。
如果您愿意从 sp
切换到 sf
包,您将有一个简单的方法来使用类似 dplyr
的语法进行空间连接。: st_join
.
它会像这样工作(我在这台电脑上没有 R 所以可能会有一些 "slips of the pen")
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 link 中的答案。
我有一个数据框,其中包含有关犯罪(变量 x)以及犯罪发生地点的纬度和经度的信息。 我有一个包含圣保罗市各区的形状文件。 我需要合并这两个数据,这样我就可以得到每个地区的犯罪数量 os。有没有办法做到这一点?我使用
在空间数据框中转换了我的数据框df.sp <- SpatialPointsDataFrame(cbind(df$longitude,df$latitude ), df)
但我不知道如何实现这种合并以获得我需要的东西。在 df 上,我有超过 10,000 个 obs,例如:
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 按地区划分的总和。我正在尝试合并这两个数据框,但没有成功。
如果您愿意从 sp
切换到 sf
包,您将有一个简单的方法来使用类似 dplyr
的语法进行空间连接。: st_join
.
它会像这样工作(我在这台电脑上没有 R 所以可能会有一些 "slips of the pen")
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 link 中的答案。