An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20110304/d24d5b1d/attachment.pl>
spdep: show neighbors from "dnearneigh"
7 messages · Kevin Ringelman, Roger Bivand, Mathieu Rajerison
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
15 days later
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
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20110322/a6f5a1a5/attachment.pl>
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
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". 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
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