[R-sig-Geo] How to efficiently generate data of neighboring points

Roger Bivand Roger@B|v@nd @end|ng |rom nhh@no
Wed Jun 3 15:18:19 CEST 2020


On Wed, 3 Jun 2020, Lom Navanyo wrote:

> I had the errors with rtree using R 3.6.3. I have since changed to R 4.0.0
> but I got the same error.
>
> And  yes, for Roger's example, I have the objects wd1, ... wd4, all with
> length 101. I think my difficulty is my inability to output the list
> detailing the point IDs t50_fid.

library(spData)
library(sf)
projdata<-st_transform(nz_height, 32759)
pts <- st_coordinates(projdata)
library(spdep)
bufferR <- c(402.336, 1609.34, 3218.69, 4828.03, 6437.38)
bds <- c(0, bufferR)
wd1 <- dnearneigh(pts, bds[1], bds[2])
wd2 <- dnearneigh(pts, bds[2], bds[3])
wd3 <- dnearneigh(pts, bds[3], bds[4])
wd4 <- dnearneigh(pts, bds[4], bds[5])
sn_band1 <- listw2sn(nb2listw(wd1, style="B", zero.policy=TRUE))
sn_band1$band <- paste(attr(wd1, "distances"), collapse="-")
sn_band2 <- listw2sn(nb2listw(wd2, style="B", zero.policy=TRUE))
sn_band2$band <- paste(attr(wd2, "distances"), collapse="-")
sn_band3 <- listw2sn(nb2listw(wd3, style="B", zero.policy=TRUE))
sn_band3$band <- paste(attr(wd3, "distances"), collapse="-")
sn_band4 <- listw2sn(nb2listw(wd4, style="B", zero.policy=TRUE))
sn_band4$band <- paste(attr(wd4, "distances"), collapse="-")
data_out <- do.call("rbind", list(sn_band1, sn_band2, sn_band3, sn_band4))
class(data_out) <- "data.frame"
table(data_out$band)
data_out$ID_from <- projdata$t50_fid[data_out$from]
data_out$ID_to <- projdata$t50_fid[data_out$to]
data_out$elev_from <- projdata$elevation[data_out$from]
data_out$elev_to <- projdata$elevation[data_out$to]
str(data_out)

The "spatial.neighbour" representation was that used in the S-Plus 
SpatialStats module, with "from" and "to" columns, and here drops 
no-neighbour cases gracefully. So listw2sn() comes in useful 
for creating the output, and from there, just look-up in the 
input data.frame. Observations here cannot be their own neighbours.

It would be relevant to know why you need these, are you looking at 
variogram clouds?

Hope this clarifies,

Roger

>
> ---------
> Lom
>
> On Tue, Jun 2, 2020 at 8:02 PM Kent Johnson <kent3737 using gmail.com> wrote:
>
>> Roger's example works for me and gives a list of length 101. I did have
>> some issues that were resolved by updating packages. I'm using R 3.6.3 on
>> macOS 10.15.4. I also use rtree successfully on Windows 10 with R 3.6.3.
>>
>> Kent
>>
>> On Tue, Jun 2, 2020 at 12:29 PM Roger Bivand <Roger.Bivand using nhh.no> wrote:
>>
>>> On Tue, 2 Jun 2020, Kent Johnson wrote:
>>>
>>>> rtree uses Euclidean distance so the points should be in a coordinate
>>>> system where this makes sense at least as a reasonable approximation.
>>>
>>> I tried the original example:
>>>
>>> remotes::install_github("hunzikp/rtree")
>>> library(spData)
>>> library(sf)
>>> projdata<-st_transform(nz_height, 32759)
>>> library(rtree)
>>> pts <- st_coordinates(projdata)
>>> rt <- RTree(st_coordinates(projdata))
>>> bufferR <- c(402.336, 1609.34, 3218.69, 4828.03, 6437.38)
>>> wd1 <- withinDistance(rt, pts, bufferR[1])
>>>
>>> but unfortunately failed (maybe newer Boost headers than yours?):
>>>
>>> Error in UseMethod("withinDistance", rTree) :
>>>    no applicable method for 'withinDistance' applied to an object of
>>> class
>>> "c('list', 'RTree')"
>>>
>>>>
>>>> Kent
>>>>
>>>> On Tue, Jun 2, 2020 at 9:59 AM Roger Bivand <Roger.Bivand using nhh.no>
>>> wrote:
>>>>
>>>>> On Tue, 2 Jun 2020, Kent Johnson wrote:
>>>>>
>>>>>>> Date: Tue, 2 Jun 2020 02:44:17 -0500
>>>>>>> From: Lom Navanyo <lomnavasia using gmail.com>
>>>>>>> To: r-sig-geo using r-project.org
>>>>>>> Subject: [R-sig-Geo] How to efficiently generate data of neighboring
>>>>>>>         points within specified radii (distances) for each point in a
>>>>> given
>>>>>>>         points data set.
>>>>>>>
>>>>>>
>>>>>>
>>>>>>> Hello,
>>>>>>> I have data set of about 3400 location points with which I am trying
>>> to
>>>>>>> generate data of each point and their neighbors within defined radii
>>>>> (eg,
>>>>>>> 0.25, 1, and 3 miles).
>>>>>>>
>>>>>>
>>>>>> The rtree package is very fast and memory-efficient for
>>> within-distance
>>>>>> calculations.
>>>>>> https://github.com/hunzikp/rtree
>>>>>
>>>>> Thanks! Does this also apply when the input points are in geographical
>>>>> coordinates?
>>>>>
>>>>> Roger
>>>>>
>>>>>>
>>>>>> Kent Johnson
>>>>>> Cambridge, MA
>>>>>>
>>>>>>       [[alternative HTML version deleted]]
>>>>>>
>>>>>> _______________________________________________
>>>>>> R-sig-Geo mailing list
>>>>>> R-sig-Geo using r-project.org
>>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>>>>
>>>>>
>>>>> --
>>>>> Roger Bivand
>>>>> Department of Economics, Norwegian School of Economics,
>>>>> Helleveien 30, N-5045 Bergen, Norway.
>>>>> voice: +47 55 95 93 55; e-mail: Roger.Bivand using nhh.no
>>>>> https://orcid.org/0000-0003-2392-6140
>>>>> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>>>>>
>>>>
>>>
>>> --
>>> Roger Bivand
>>> Department of Economics, Norwegian School of Economics,
>>> Helleveien 30, N-5045 Bergen, Norway.
>>> voice: +47 55 95 93 55; e-mail: Roger.Bivand using nhh.no
>>> https://orcid.org/0000-0003-2392-6140
>>> https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en
>>>
>>
>

-- 
Roger Bivand
Department of Economics, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: Roger.Bivand using nhh.no
https://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en



More information about the R-sig-Geo mailing list