我试图测量雏鸟从原来的巢址移动到他们明年建立的地区的距离。我想使用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而不是行号和列号?
答案 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
返回距离。