在spatstat中通过ID测量点之间的距离

时间:2016-01-18 22:31:34

标签: r spatstat

我试图测量雏鸟从原来的巢址移动到他们明年建立的地区的距离。我想使用spatstat包来做这件事,但是我的输出有一些功能(例如,nncross,nndist,crossdist)。这是我的代码的样子,数据在这里:https://sites.google.com/site/datastackoverflow/shapefiles

library(raster)
library(spatstat)
library(maptools)

# read in shapefile with nest locations (UTMs) and convert to ppp format:
nests <- readShapeSpatial("nest_locs.shp")
X<-as.ppp(nests)
X

# read in shapefile with juvenile locations (UTMs) and convert to ppp format:
juvs <- readShapeSpatial("juv_locs.shp")
Y<-as.ppp(juvs)
Y

# calculate the distance between nest points and juveniles:
N<-nncross(X,Y)
N

# another option
crossdist(X, Y)

结果看起来像这样:

> crossdist(X, Y)
     [,1]     [,2]
[1,] 2756.546 1994.002
[2,] 3831.429 3466.360

是否可以保留点ID,在这种情况下是nestID和相应的birdID而不是行号和列号?

3 个答案:

答案 0 :(得分:1)

请在您的代码中提供一些示例数据,而不是要下载的文件。

&#34; ID&#34;在R中是常见的隐式:行与X的顺序相同,列的排序为Y。你可以做到

z <- crossdist(X, Y) 
rownames(z) <- X$nestID 
colnames(z) <- Y$birdID 

您也可以使用raster :: pointDistance。

答案 1 :(得分:0)

crossdist的情况下,@ Robertbe回答了你的回答。对于nncross,函数为每个嵌套(X)找到最接近此嵌套的鸟(Y)。最近的鸟的索引位于which中标记为N的列中。您应该可以将其转换为birdID这样的代码(我没有运行代码,因此未经测试):

N$which <- Y$birdID[N$which]

答案 2 :(得分:0)

只是为了澄清:

  • crossdist(X,Y) 计算{em>每个点X每个Y的距离并返回矩阵距离d d[i,j]X[i]Y[j]的距离。 X的点对应d行。 Y的点数对应d

  • nncross(X,Y)为每个点X[i]找到Y中最近的点,默认情况下,返回到此最近点($dist[i])的距离和最近点($which[i])的序列号。也就是说,$which[i]=j如果X[i]的最近邻居是Y[j]。如果Y的点具有其他属性(如ID字符串),则只需使用序列号($which)来提取相关条目。

  • nndist(X)nnwhich(X)对单点模式X进行操作。他们在同一点模式中找到每个点X[i]最近的邻居 ,比如说X[j] j != i。然后nnwhich返回索引j,而nndist返回距离。