Bagaimana saya bisa menggunakan fortify () untuk membuat bingkai data R yang difilter dari shapefile?

11

Saya sedang dalam proses membangun ggplotpeta populasi choropleth di wilayah administrasi di Wales. Saya telah mengunduh data Batas-Garis dari Ordnance Survey dan mengekstraksi apa yang tampaknya menjadi shapefile yang tepat (community_ward_region.shp). Menggunakan R, saya sudah sampai sejauh membaca di shapefile.

require(maptools)
shape <- readShapePoly(wards)
str(shape)

Yang memberi saya hasil yang menjanjikan ini:

Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
  ..@ data       :'data.frame': 1690 obs. of  4 variables:
  .. ..$ NAME      : Factor w/ 1507 levels "Abbey Cwmhir",..: 969 90 111 200 441 477 1455 249 255 305 ...
  .. ..$ DESCRIPTIO: Factor w/ 4 levels "COMMUNITY","COMMUNITY WARD",..: 2 2 1 1 2 2 2 2 1 1 ...
  .. ..$ COMMUNITY : Factor w/ 858 levels "Abbey Cwmhir",..: 67 67 81 128 152 152 152 152 157 190 ...
  .. ..$ FILE_NAME : Factor w/ 23 levels "ABERTAWE_-_SWANSEA",..: 1 1 1 1 1 1 1 1 1 1 ...
  .. ..- attr(*, "data_types")= chr [1:4] "C" "C" "C" "C"
  ..@ polygons   :List of 1690
  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
  .. .. .. ..@ Polygons :List of 1
  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
  .. .. .. .. .. .. ..@ labpt  : num [1:2] 259009 188524
  .. .. .. .. .. .. ..@ area   : num 1923892
  .. .. .. .. .. .. ..@ hole   : logi FALSE
  .. .. .. .. .. .. ..@ ringDir: int 1
  .. .. .. .. .. .. ..@ coords : num [1:1629, 1:2] 259413 259420 259427 259427 259432 ...
  .. .. .. ..@ plotOrder: int 1
  .. .. .. ..@ labpt    : num [1:2] 259009 188524
  .. .. .. ..@ ID       : chr "0"
  .. .. .. ..@ area     : num 1923892

Sekarang jika saya melakukan ini:

bar <- fortify(shape, region = "NAME")

Saya mendapatkan kerangka data bagus baryang terlihat cukup banyak seperti yang saya harapkan:

> str(bar)
'data.frame':   4744053 obs. of  7 variables:
 $ long : num  302962 302970 302974 303013 303015 ...
 $ lat  : num  280066 280076 280078 280097 280105 ...
 $ order: int  1 2 3 4 5 6 7 8 9 10 ...
 $ hole : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ piece: Factor w/ 29 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ group: Factor w/ 1762 levels "Abbey Cwmhir.1",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ id   : chr  "Abbey Cwmhir" "Abbey Cwmhir" "Abbey Cwmhir" "Abbey Cwmhir" ..

Namun, ini adalah kerangka data yang besar dan ggplotkehabisan napas saat mencoba menampilkannya. Pada kenyataannya saya hanya ingin melihat satu area pada satu waktu. Sepertinya FILE_NAMEfaktor dalam objek bentuk adalah apa yang saya inginkan karena sebagian besar sesuai dengan kabupaten dan conurbations utama.

> unique(shape@data$FILE_NAME)
 [1] ABERTAWE_-_SWANSEA
 [2] BLAENAU_GWENT_-_BLAENAU_GWENT
 [3] BRO_MORGANNWG_-_THE_VALE_OF_GLAMORGAN
 [4] CAERDYDD_-_CARDIFF
 [5] CAERFFILI_-_CAERPHILLY
 [6] CASNEWYDD_-_NEWPORT
 [7] CASTELL-NEDD_PORT_TALBOT_-_NEATH_PORT_TALBOT
 [8] CONWY_-_CONWY
 [9] GWYNEDD_-_GWYNEDD
[10] MERTHYR_TUDFUL_-_MERTHYR_TYDFIL
[11] PEN-Y-BONT_AR_OGWR_-_BRIDGEND
[12] POWYS_-_POWYS
[13] RHONDDA_CYNON_TAF_-_RHONDDA_CYNON_TAFF
[14] SIR BENFRO - PEMBROKESHIRE
[15] SIR_BENFRO_-_PEMBROKESHIRE
[16] SIR_CEREDIGION_-_CEREDIGION
[17] SIR_DDINBYCH_-_DENBIGHSHIRE
[18] SIR_FYNWY_-_MONMOUTHSHIRE
[19] SIR_GAERFYRDDIN_-_CARMARTHENSHIRE
[20] SIR_YNYS_MON_-_ISLE_OF_ANGLESEY
[21] SIR_Y_FFLINT_-_FLINTSHIRE
[22] TOR-FAEN_-_TORFAEN
[23] WRECSAM_-_WREXHAM
23 Levels: ABERTAWE_-_SWANSEA ... WRECSAM_-_WREXHAM

P. Bagaimana saya bisa memilih hanya sebagian dari data dari shapeobjek yang saya ekstrak dari shapefile? Misalnya, hanya POWYS_-_POWYSbagian - bagiannya saja? Jika saya entah bagaimana bisa memasukkan FILE_NAMEdalam frame data yang dibuat dengan fortifymaka saya bisa dengan mudah mengatur ulang barframe data tetapi saya tidak tahu bagaimana melakukannya. Atau adakah cara yang digunakan fortifyuntuk mengekstraksi hanya bagian dari objek?

SlowLearner
sumber

Jawaban:

5

Pilih subset dari data shapefile menggunakan pengindeksan:

sub.shape <- shape[shape$FILE_NAME == "POWYS_-_POWYS",]

fortify(sub.shape) kemudian akan memberi Anda kerangka data yang jauh berkurang.

Simbamangu
sumber
Terima kasih, memeriksa sekarang, terlihat menjanjikan. Haruskah itu menjadi ",]" pada akhirnya di sana?
SlowLearner
1
@slowlearner - Aduh, ya, hilang koma, kesalahan abadi saya ...
Simbamangu