coast<-readShapeSpatial("coastline.shp")
landc<-readShapeSpatial("landcover.shp")
ro<-readShapeSpatial("roads.shp")
bc<-gBuffer(ro,width=100)
landc$ratings=1
landc$ratings[landc$LANDUSE_ID==4]=0
Powyżej biorę dowolną kategorię, która ma 4, i w nowej kolumnie wpisuję ją jako 0.
W tym momencie chcę również nazwę kolumny ratings
dla bc
, gdzie zajmie 0, jeśli jest w buforze i 1, jeśli jest na zewnątrz. Problem polega na tym, że bc
jest SpatialPolygons
i nie zawiera tabeli atrybutów.
Oczywiście, aby dodać kolumnę do SpatialPolygon
obiektu, musisz przekonwertować ją na obiekt SpatialPolygonsDataFrame
, ale nie wiem jak.
Próbowałem tego:
buf_df<-as.data.frame(bc)
s_po<-SpatialPolygonsDataFrame(bc,buf_df)
s_po$ratings=0
ale pojawia się ten błąd:
row.names of data and Polygons IDs do not match
r
cartography
gsa
źródło
źródło
Odpowiedzi:
Co mają wspólnego z twoim problemem obiekty „coast”, „ro” i „bc”? Problem może polegać na tym, że używasz „readShapeSpatial”. Czy próbowałeś readOGR w rgdal? Jeśli czytasz plik kształtu wielokąta, readOGR spowoduje utworzenie obiektu SpatialPolygonsDataFrame.
Jeśli faktycznie masz obiekt SpatialPolygons i chcesz przekonać się do SpatialPolygonsDataFrame, określona ramka danych będzie musiała dopasować nazwy runa do identyfikatorów wielokątów w gnieździe wielokątów. Oto szybki przykład.
źródło
Próbować:
match.ID
unika wymogu nazw rown dla identyfikatora wielokątów dopasowaniaźródło
To jest dość proste:
Gdy pojawia się błąd: „Wiersz.nazwy danych i identyfikatory wielokątów nie pasują”, to rozwiązanie wydaje się pomocne: zmień nazwy identyfikatorów ramki danych, aby dopasować identyfikatory wielokątów:
źródło
SpatialPolygonsDataFrame
tworzenia.Uważam, że następujące rozwiązanie ogólnie działa.
Najpierw utwórz pustą ramkę danych o polu ID jako:
Następnie uzyskaj identyfikatory wielokąta przestrzennego
bc
:Następnie użyj df jako drugiego argumentu do funkcji konwersji przestrzennej ramki danych:
Ponieważ
df
ispatial_df
są obiektami ramki danych, kolumny można łatwo dodawaćźródło