所以我有包含我需要的所有地理数据的形状文件
到目前为止我尝试过的代码是这样的
tm_shape(LSOA_London) + tm_fill( "$Crime_rate", palette = "spectral") + tm_border()
我遇到的问题是“crime_rate”数据来自 csv 文件,我不知道如何转换它以便它在我的地图中工作。
我需要栅格化数据吗?
任何帮助都会很棒!
如上所示,这是我尝试过的,我尚未将 csv 与 .shp 文件合并,但我再次不确定这是如何工作的。我已经有一段时间没有进行 rstudio 编码了,所以一切都很生疏。
您必须将形状数据与.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