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
Ci-dessus, je prends n'importe quelle catégorie qui a 4 et dans la nouvelle colonne, je la mets à 0.
À ce stade, je veux que la colonne soit également nommée ratings
pour le bc
, où elle prendra 0 si elle est à l'intérieur du tampon et 1 si elle est à l'extérieur. Le problème est que le bc
est SpatialPolygons
et qu'il ne contient pas la table attributaire.
Évidemment, pour ajouter une colonne à un SpatialPolygon
objet, vous devez la convertir en un SpatialPolygonsDataFrame
, mais je ne sais pas comment.
J'ai essayé ceci:
buf_df<-as.data.frame(bc)
s_po<-SpatialPolygonsDataFrame(bc,buf_df)
s_po$ratings=0
mais cette erreur apparaît:
row.names of data and Polygons IDs do not match
r
cartography
gsa
la source
la source
Réponses:
Qu'est-ce que les objets "côte", "ro" et "bc" ont à voir avec votre problème? Le problème peut résider dans le fait que vous utilisez "readShapeSpatial". Avez-vous essayé readOGR dans rgdal? Si vous lisez un fichier de formes de polygones, readOGR produira un objet SpatialPolygonsDataFrame.
Si vous avez en fait un objet SpatialPolygons et que vous souhaitez contraindre SpatialPolygonsDataFrame, le cadre de données spécifié devra avoir ses noms de correspondance correspondant aux ID de polygone dans l'emplacement des polygones. Voici un petit exemple.
la source
Essayer:
match.ID
évite la nécessité de renommer les ID des polygones de correspondancela source
C'est assez simple:
Lorsque l'erreur: "row.names of data and Polygons IDs do not match" survient, cette solution semble être utile: renommer les ID de la trame de données pour correspondre aux ID des polygones:
la source
SpatialPolygonsDataFrame
création.Je trouve que la solution suivante fonctionne généralement.
Créez d'abord une trame de données vide avec l'ID comme champ:
Obtenez ensuite les identifiants du polygone spatial
bc
:Utilisez ensuite df comme deuxième argument de la fonction de conversion de trame de données spatiales:
Comme
df
etspatial_df
sont des objets de trame de données, les colonnes peuvent être facilement ajoutéesla source