ฉันจะใช้ fortify () เพื่อสร้างกรอบข้อมูล R ที่ถูกกรองจากเชพไฟล์ได้อย่างไร?


11

ฉันอยู่ในขั้นตอนการสร้างggplotแผนที่ประชากรในเขตปกครองในเวลส์ ฉันได้ดาวน์โหลดข้อมูล Boundary-Line จากการสำรวจอาวุธยุทโธปกรณ์และแยกสิ่งที่ดูเหมือนว่าจะเป็นรูปร่างที่ถูกต้อง (community_ward_region.shp) ใช้ R ฉันได้เท่าที่อ่านในรูปร่างไฟล์

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

ซึ่งให้ผลลัพธ์ที่ฉันสัญญานี้:

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

ตอนนี้ถ้าฉันทำสิ่งนี้:

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

ฉันได้รับ data frame barที่สวยงามซึ่งมีลักษณะเหมือนที่ฉันคาดไว้:

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

อย่างไรก็ตามนี่เป็นเฟรมข้อมูลขนาดใหญ่และมีggplotพัฟหมดเมื่อพยายามแสดง ในความเป็นจริงฉันต้องการดูครั้งละหนึ่งจุดเท่านั้น ดูเหมือนว่าFILE_NAMEปัจจัยในวัตถุรูปร่างเป็นสิ่งที่ฉันต้องการเพราะส่วนใหญ่สอดคล้องกับมณฑลและเขตการปกครองที่สำคัญ

> 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

ถาม: ฉันจะเลือกได้เพียงชุดย่อยของข้อมูลจากshapeวัตถุที่ฉันแยกออกจากรูปร่างไฟล์ได้อย่างไร ตัวอย่างเช่นPOWYS_-_POWYSชิ้นส่วนเท่านั้น? หากฉันสามารถรวมFILE_NAMEอยู่ในกรอบข้อมูลที่สร้างขึ้นด้วยfortifyฉันสามารถย่อยbarเฟรมข้อมูลได้อย่างง่ายดายแต่ฉันไม่รู้วิธีการทำเช่นนั้น หรือมีวิธีใช้fortifyในการแยกเฉพาะส่วนของวัตถุหรือไม่

คำตอบ:


5

เลือกเซ็ตย่อยของข้อมูล shapefile โดยใช้การทำดัชนี:

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

fortify(sub.shape) จะทำให้คุณมีดาต้าเฟรมลดลงมาก


ขอบคุณตรวจสอบตอนนี้ดูมีแนวโน้ม นั่นน่าจะเป็น ",]" ในตอนท้ายใช่ไหม?
SlowLearner

1
@slowlearner - อ๊ะใช่หายไปจุลภาคข้อผิดพลาดของฉันตลอดไป ...
Simbamangu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.