Hi folks, I tried Roger's suggested method for adding extra links directly into a neighbor list. To get it to work, I had to coerce the vector representing the new link to be an integer vector instead of a numeric vector. Here's what worked.
# Create an integer vector of the 2 regions (23 & 31) that need to be connected. ij <- as.integer(c(23,31)) # Update the neighbor list to add the symmetric link. nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2]))) nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1]))) I just wanted to share that detail back to the list in case anyone else wants to do this sort of data manipulation. Steven J. Pierce E-mail: [EMAIL PROTECTED] -----Original Message----- From: Roger Bivand [mailto:[EMAIL PROTECTED] Sent: Saturday, June 03, 2006 7:11 AM To: Steven J. Pierce Cc: r-sig-geo@stat.math.ethz.ch Subject: Re: [R-sig-Geo] adding links to neighbour lists On Fri, 2 Jun 2006, Steven J. Pierce wrote: > Hi folks, > > After using spdep to construct a neighbor list from a SpatialPolygons > object, I plotted the neighbor list and noted that I needed one more link > that wasn't caught by the poly2nb command. I found the edit.nb() function > and can successfully use the interactive graphical interface to add the > link, but would like to know if there is an alternative method for adding a > link between two regions. What would I need to do to directly edit the > neighbor list object to include an additional link between regions 23 and > 31? There is a drop.links() function but no add.links(). So yes, you could manipulate the list directly. If ij is a two element vector for the missing link: nb[[ij[1]]] <- sort(unique(c(nb[[ij[1]]], ij[2]))) nb[[ij[2]]] <- sort(unique(c(nb[[ij[2]]], ij[1]))) should do it (untried). If there are more links, have a look at drop.links and see if you can adapt it. > > > > # Create a SpatialPolygons object from a SpatialPolygonsDataFrame object, > this > > # helps set up for creating a neighbor list via commands from spdep > package > > > > CITY.polys <- as.SpatialPolygons.PolygonsList([EMAIL PROTECTED], > + > proj4string=CRS(projection.details)) > > I think: CITY.polys <- as(CITY.ZCTA.data, "SpatialPolygons") should be enough, in time poly2nb() will do that internally. > > # Create a neighbor list based on shared boundary. We need this to > facilitate > > # creating a weights matrix when we go to do spatial regression models. > > > > CITY.nb <- poly2nb(CITY.polys, row.names = NULL, > snap=sqrt(.Machine$double.eps), queen=TRUE) > > > > # Capture coordinates of ZCTA centroids into a matrix we can use in > plotting > > # the neighbor list. > > > > coords.mat <- cbind(CITY.ZCTA.data$centroid.x, CITY.ZCTA.data$centroid.y) > > Could be: coords.mat <- coordinates(CITY.ZCTA.data) if the centroid.x|y values correspond to the polygon centroids. Roger > > # Plot the neighbor list (reveals we need to add 1 more link) > > > > plot(CITY.ZCTA.data, col="grey", border="black", axes=FALSE, asp=1, > yaxs="i") > > title(main="Neighbor List Links", adj= 0, cex.sub=.75) > > plot(CITY.nb, coords.mat, add=TRUE, col="black", lwd=2) > > > > # Add 1 link to neighbor list. This requires interaction with the graphics > > # on screen. > > > > CITY.nb <- edit.nb(CITY.nb, coords.mat, polys=CITY.polys) > Identifying contiguity for deletion ... > No contiguity between chosen points > Add contiguity? (y/n) y > added contiguity between point 23 and 31 > Options: quit[q] refresh[r] continue[c] q > > > > # Plot the revised neighbor list (now everything looks right) > > > > plot(CITY.ZCTA.data, col="grey", border="black", axes=FALSE, asp=1, > yaxs="i") > > title(main="Neighbor List Links", adj= 0, cex.sub=.75) > > plot(CITY.nb, coords.mat, add=TRUE, col="black", lwd=2) > > > Steven J. Pierce > E-mail: [EMAIL PROTECTED] > > _______________________________________________ > R-sig-Geo mailing list > R-sig-Geo@stat.math.ethz.ch > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > -- Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: [EMAIL PROTECTED] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo