Bir şekil dosyasından filtrelenmiş bir R veri çerçevesi oluşturmak için fortify () öğesini nasıl kullanabilirim?


11

Bir bina etmek üzereyim ggplotGaller'de idari alanlarda nüfusun choropleth harita. Ordnance Survey'den Sınır Çizgisi verilerini indirdim ve doğru şekil dosyası (community_ward_region.shp) gibi görünen şeyi çıkardım . R'yi kullanarak şekil dosyasında okumak kadar ilerledim.

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

Bu bana bu umut verici çıktıyı veriyor:

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

Şimdi bunu yaparsam:

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

barBeklediğim gibi görünen güzel bir veri çerçevesi alıyorum:

> 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" ..

Ancak, bu büyük bir veri çerçevesidir ve ggplotgörüntülemeye çalışırken puf biter. Gerçekte her seferinde sadece bir alana bakmak istiyorum. Sanki görünüyor FILE_NAMEşekille faktör Ben çoğunlukla ilçe ve belli başlı conurbations tekabül olarak istiyoruz.

> 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

S. Şekil shapedosyasından ayıkladığım nesneden yalnızca bir veri alt kümesini nasıl seçebilirim ? Örneğin, sadece POWYS_-_POWYSparçalar? Bir şekilde FILE_NAMEoluşturulan veri çerçevesine bir şekilde dahil edebilirsem , veri çerçevesini fortifykolayca alt kümeye alabilirdim, barancak bunu nasıl yapacağımı bilmiyorum. Yoksa fortifynesnenin sadece parçalarını çıkarmak için kullanmanın bir yolu var mı?

Yanıtlar:


5

Dizin oluşturmayı kullanarak şekil dosyası verilerinin bir alt kümesini seçin:

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

fortify(sub.shape) size çok daha düşük bir veri çerçevesi sunar.


Teşekkürler, şimdi kontrol, umut verici görünüyor. Sonunda belki de bir ",]" olmalı mı?
SlowLearner

1
@slowlearner - Hata! Evet, eksik virgül, kalıcı
hatam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.