嗨!我有一个包含伦敦地区地理数据的形状文件。尝试制作 tmap 并包含 csv 文件中的犯罪率数据,我该怎么做

问题描述 投票:0回答:1

所以我有包含我需要的所有地理数据的形状文件

到目前为止我尝试过的代码是这样的

tm_shape(LSOA_London) + tm_fill( "$Crime_rate", palette = "spectral") + tm_border()

我遇到的问题是“crime_rate”数据来自 csv 文件,我不知道如何转换它以便它在我的地图中工作。

我需要栅格化数据吗?

任何帮助都会很棒!

如上所示,这是我尝试过的,我尚未将 csv 与 .shp 文件合并,但我再次不确定这是如何工作的。我已经有一段时间没有进行 rstudio 编码了,所以一切都很生疏。

r csv shapefile tmap
1个回答
0
投票

您必须将形状数据与.csv文件中的数据

加入
。由于很难猜测您正在使用的数据,下面的示例基于一些可用的在线数据。连接类型取决于两个数据集中的数据类型:如果两个数据集都是空间数据,您可以使用 {dplyr} 包中的
left_join()
来连接特定列,也可以使用 {sf} 包中的
left_join()

边界来自 {geographr} 包:

london_lsoa <- geographr::boundaries_lsoa11
london_lsoa
#> Simple feature collection with 34753 features and 2 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -6.378393 ymin: 49.88235 xmax: 1.762942 ymax: 55.81107
#> Geodetic CRS:  WGS 84
#> # A tibble: 34,753 × 3
#>    lsoa11_name               lsoa11_code                                geometry
#>  * <chr>                     <chr>                            <MULTIPOLYGON [°]>
#>  1 City of London 001A       E01000001   (((-0.0972656 51.52158, -0.0947445 51.…
#>  2 City of London 001B       E01000002   (((-0.092737 51.52139, -0.088103 51.51…
#>  3 City of London 001C       E01000003   (((-0.0967596 51.52325, -0.0945333 51.…
[...]

以及来自在线资源的犯罪数据:

download.file(url = "https://data.london.gov.uk/download/recorded_crime_summary/11f0256e-bbde-46ca-ac49-89eaba2bd4b8/MPS%20LSOA%20Level%20Crime%20%28most%20recent%2024%20months%29.csv",
              destfile = "~/Downloads/LSOA_crime.csv",
              method = "wget",
              extra = "-c")

lsoa_crime <-
  read.csv(file = "~/Downloads/LSOA_crime.csv")
head(lsoa_crime)
#>   LSOA.Code                 LSOA.Name   Borough
#> 1 E01000006 Barking and Dagenham 016A E09000002
#> 2 E01000006 Barking and Dagenham 016A E09000002
#> 3 E01000006 Barking and Dagenham 016A E09000002
#>                         Major.Category        Minor.Category X202202 X202203
#> 1            Arson and Criminal Damage       Criminal Damage       1       0
#> 2                             Burglary     Domestic Burglary       0       1
#> 3                        Drug Offences      Drug Trafficking       0       0
#>   X202204 X202205 X202206 X202207 X202208 X202209 X202210 X202211 X202212
#> 1       0       0       0       2       1       0       0       0       0
#> 2       0       0       0       0       0       0       0       2       0
#> 3       0       0       0       0       0       0       0       0       0

如您所见,两个数据集在边界中都有一个“公共”列

lsoa11_code
,在犯罪数据中都有
LSOA.Code
。我们可以使用此列来连接两个数据集,过滤掉包含犯罪数量的示例列,并对每个 LSOA 区域进行总结:

lsoa <- london_lsoa |>
  dplyr::left_join(lsoa_crime, by = c("lsoa11_code" = "LSOA.Code")) |>
  subset(!is.na(X202202), select = c("lsoa11_name", "lsoa11_code", "X202202", "geometry")) |>
  dplyr::group_by(lsoa11_code) |>
  dplyr::summarise(sum = sum(X202202), .groups = "keep")

tmap::tm_shape(lsoa) +
  tmap::tm_polygons(fill = "sum",
                    fill.scale = tmap::tm_scale_intervals(n = 6,
                                                          values = "Blues")) +
  tmap::tm_borders(col = "grey60", lwd = 0.1)

创建于 2024-03-04,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.