2013-03-07 6 views
4

Я уже некоторое время занимаюсь этим и добился определенных успехов, однако, когда дело доходит до перезаписи файла, у меня его не было.Как я могу устранить некоторые области по атрибуту из шейп-файла в R и создать новый шейп-файл?

Форма шейп-файла, с которой я работаю, представляет собой полигонный шейп-файл метро и микрорайона, но меня не интересуют микрорайоны, поэтому я работаю с shp в R, чтобы попытаться устранить их с моей карты.

Data Source

Чтобы скачать нужный файл, убедитесь, что вы выберите «Все государства в одном национальном файле» под «Метрополитен/Micropolitan статистический район (2010)»

Вот что я до сих пор:

library(maptools) 
met=readShapeSpatial("tl_2010_us_cbsa10.shp") 
[email protected] 

Перед подмножестве:

NAMELSAD10  LSAD10 
Anchorage, AK Metro Area - M1 
Clarksdale, MS Micro Area - M2 
Richmond, VA Metro Area - M1 
Big Spring, TX Micro Area - M2 
Dallas-Fort Worth-Arlington, TX Metro Area - M1 
Rio Grande City-Roma, TX Micro Area - M2 

затем:

submet=subset(met, LSAD10 == "M1") 

После подмножества:

NAMELSAD10 LSAD10 
Anchorage, AK Metro Area - M1 
Richmond, VA Metro Area - M1 
Dallas-Fort Worth-Arlington, TX Metro Area - M1 
Vineland-Millville-Bridgeton, NJ Metro Area - M1 
Casper, WY Metro Area - M1 
Cheyenne, WY Metro Area - M1 

затем:

writeSpatialShape(submet, "tl_2010_us_ma10", factor2char = TRUE) 

Используя этот код я смог успешно устранить Micropolitan области, обозначенные "M1", но когда я пытаюсь чтобы переписать файл, он не отображается в моем wd.

Я также попытался использовать пакет «shapefiles», чтобы сделать это, но имел еще меньший успех. Поэтому любая помощь в этом вопросе была бы весьма признательна.

+0

Ваша ссылка на данные никуда. – Spacedman

+0

Вы можете продемонстрировать нам, что это не в вашем «wd», запустив list.files («.») И разместив это тоже. Я просто не верю, что его нет, я считаю, что вы ошиблись в своем «wd» с текущим каталогом R. – mdsumner

+0

Хорошо, я верю, Spacedman продемонстрировал это. :) – mdsumner

ответ

7

Когда вы делаете [email protected], вы теряете Пространственный аспект met и получаете только простой старый фрейм данных.

Затем вы подмножите этот фрейм данных, а затем попробуйте и writeSpatialShape. Вау. Объект submet не имеет никаких полигонов или координат. writeSpatialShape должен быть бар. Но ему удается проглотить его и сохранить. Проверьте это:

> writeSpatialShape(1,"foo.shp") 
> 

и, как вы заметили, не создается шейп-файл. Ничего себе, это довольно пристойная обработка ошибок.

два решения: 1, работа на реальном объекте, а не компонент данных, как это:

met = readOGR(dir,name) 
submet = met[met$thing=="whatever",] 
writeOGR(submet,dir,newname,"ESRI Shapefile") 

2, используйте package:rgdal и read/write|OGR, который не только обрабатывает прогнозы, но сильно болен, если вы пытаетесь сделать он есть что-то неприятное:

> writeOGR(1,".","foo","ESRI Shapefile") 
Error: inherits(obj, "Spatial") is not TRUE 
+0

Спасибо за ваш быстрый ответ и за вашу помощь. Я выполнил вторую рекомендацию и вместо этого использовал rgdal и получил желаемые результаты. Я даже получил свой новый шейп-файл, открытый в ArcGIS, и он идеально подходит. –