[R-sig-Geo] spdep: show neighbors from "dnearneigh"

Roger Bivand Roger.Bivand at nhh.no
Wed Mar 23 07:36:38 CET 2011


On Tue, 22 Mar 2011, Kevin Ringelman wrote:

> Thanks Roger and Mathieu.  Instead of:
> [[1]]
>  [1]   2  10  11  15  17
>
> I now have:
> 1	2
> 1	10
> 1	11
> 1	15
> 1	17
>
> For the last piece of this analysis, I would like to generate a list of
> neighbor distances to complete my table.
> nbd <- nbdist(nb, SpatialPoints)
> nbd
> [[1]]
> [1] 84.95881 90.35486 75.92760 22.20360 81.00617
>
> But ideally, I would like to have
> 1	2	84.95881
> 1	10	90.35486
> 1	11	75.92760
> 1	15	22.20360
> 1	17	81.00617
>
> I can't use nb2listw (and then merge), because this is an object of class
> "nbdist".  I also cannot use the Mathieu's melt method, because I nb2mat
> also requires an object of class "nb".

But listw2mat doesn't - see ?nb2mat. For the direct route, see ?nb2listw, 
and ?listw2sn:

ds <- nbdists(us48.q, as.matrix(as.data.frame(state.center))[m50.48,],
   longlat=TRUE)
# here using a matrix of state centroids - geographical coordinates
lw <- nb2listw(us48.q, glist=ds, style="B")
res <- listw2sn(lw)
res[1:9,]
# with distances in this case in Great Circle km.

Roger


>
> Suggestions?
>
>
>
>
> -----Original Message-----
> From: Roger Bivand [mailto:Roger.Bivand at nhh.no]
> Sent: Tuesday, March 22, 2011 1:30 AM
> To: Mathieu Rajerison
> Cc: kmringelman at ucdavis.edu; r-sig-geo at r-project.org
> Subject: Re: [R-sig-Geo] spdep: show neighbors from "dnearneigh"
>
> On Tue, 22 Mar 2011, Mathieu Rajerison wrote:
>
>> Hi,
>>
>> Maybe you should convert your nb object into a matrix using nb2mat then
> use
>> reshape package?
>>
>> library(reshape)
>>
>> df<-as.data.frame(nb.mat)
>>
>> df$id<-row.names(df)
>>
>> mdata<-melt(df,id="id")
>>
>> then subset your data for which mdata$value > 0
>
> No, the question was how to convert to a two-column from-to
> representation, and a direct route is:
>
> example(read.gal)
> # to get an nb object
> us48.q
> us48.q[1:2]
> res <- listw2sn(nb2listw(us48.q))[,1:2]
> res[1:9,]
> str(res)
>
> If you need a matrix, do as.matrix(res).
>
> Roger
>
>
>>
>>
>> 2011/3/21 Kevin Ringelman <kmringelman at ucdavis.edu>
>>
>>> Thanks for your help Roger.  I have a couple more questions.
>>>
>>> print.default(nb) shows me what I'm looking for: for each region, I see
> the
>>> regions that are within my distance band.  For example:
>>>
>>> [[1]]
>>>  [1]   2  10  11  15  17  18  19  32  40 554
>>>
>>> [[2]]
>>>  [1]   1  15  17  21  33  34 426 511 554 557
>>>
>>> I want to make this information into a table, with the focal regions as
>>> column 1, and the region IDs of it's neighbors as column 2 (similar to
>>> neighbor analysis output in ArcGIS).  Continuing the example from above:
>>> 1       2
>>> 1       10
>>> 1       11
>>> 1       15
>>> 1       17
>>> (etc.)
>>>
>>> Even after I nuke the nb class
>>> U <- unclass(nb)
>>> I still can't access or manipulate the data...it doesn't appear as an
>>> attribute
>>> attribute(U)
>>>
>>> Any suggestions?
>>>
>>>
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: Roger Bivand [mailto:Roger.Bivand at nhh.no]
>>> Sent: Saturday, March 05, 2011 10:03 AM
>>> To: Kevin Ringelman
>>> Cc: r-sig-geo at r-project.org
>>> Subject: Re: [R-sig-Geo] spdep: show neighbors from "dnearneigh"
>>>
>>> On Fri, 4 Mar 2011, Kevin Ringelman wrote:
>>>
>>>> I am having trouble viewing the list of neighbors ("regions IDs") after
>>>> created a nb object using the "dnearneigh" function in spdep.  I only
>>> seem
>>>> to get a summary (with # regions, # non-zero links, etc.).  This nb
>>> object
>>>> also doesn't take well to being converted to another type of object, or
>>>> exported from R.  How I view the list of neighbors?
>>>>
>>>
>>> In S and R, objects with a class attribute, such as "nb" objects, may
> have
>>> display methods specific to the class. If you just say:
>>>
>>>> nb
>>>
>>> then this is expanded internally to print(nb), and since nb is an object
>>> of class "nb", the print.nb() method is chosen. If you want the default
>>> print method, call it as print.default(nb). Conversion of objects of one
>>> class to another class may be done by coercion where coercion methods are
>>> provided. No such methods are available for nb objects. There are
>>> functions to do things like this, but not methods. For example, to make
> an
>>> nb object into a row-standardised matrix, you might do:
>>>
>>>> Wmat <- nb2mat(nb, style="W")
>>>
>>> but you should avoid this if your number of observations is large. To
> make
>>> a sparse matrix, several steps are required:
>>>
>>>> lw <- nb2listw(nb, style="W")
>>>> spWmat <- as(as_dgRMatrix_listw(lw), "CsparseMatrix")
>>>
>>> using the nb2listw() and (ugly name) as_dgRMatrix_listw() functions, and
>>> coercion from one representation to another using new-style classes
>>> defined in the Matrix package.
>>>
>>>>
>>>>
>>>> Some additional background: I'm identifying all neighboring bird nests
>>>> within 100m of each nest.  For this particular analysis, I ultimately
>>> want
>>>> to calculate the average vegetation height of neighboring nests to
>>> compare
>>>> with the focal nest.  This will involve generating a list of neighbors,
>>> and
>>>> merging that list with my other data.
>>>>
>>>
>>> Note that an nb object is a list - to nuke the class, do:
>>>
>>>> class(nb) <- NULL
>>>
>>> which lets you call print.default(), but to get at the attribute you
> want,
>>> just do:
>>>
>>>> attr(nb, "region.id")
>>>
>>> to call print.default on the character vector it contains.
>>>
>>> Hope this clarifies,
>>>
>>> Roger
>>>
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Kevin
>>>>
>>>>
>>>>       [[alternative HTML version deleted]]
>>>>
>>>> _______________________________________________
>>>> R-sig-Geo mailing list
>>>> R-sig-Geo at r-project.org
>>>> 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: Roger.Bivand at nhh.no
>>>
>>> _______________________________________________
>>> R-sig-Geo mailing list
>>> R-sig-Geo at r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>
>>
>> 	[[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at r-project.org
>> 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: Roger.Bivand at nhh.no



More information about the R-sig-Geo mailing list