【发布时间】:2017-10-18 23:06:22
【问题描述】:
使用此示例数据来了解我的意思
tag <- as.character(c(1,2,3,4,5,6,7,8,9,10))
species <- c("A","A","A","A","B","B","B","C","C","D")
size <- c(0.10,0.20,0.25,0.30,0.30,0.15,0.15,0.20,0.15,0.15)
radius <- (size*40)
x <- c(9,4,25,14,28,19,9,22,10,2)
y <- c(36,7,15,16,22,24,39,20,34,9)
data <- data.frame(tag, species, size, radius, x, y)
# Plot the points using qplot (from package tidyverse)
qplot(x, y, data = data) +
geom_point(aes(colour = species, size = size))
现在你可以看到情节了,我想做的是对于每个单独的“物种 A”点,我想确定半径 *40 内的最大点。
例如,在图的左下角,您可以看到物种 A(标签 2)会产生足够大的半径以包含靠近的物种 D 点。
但是,绘图最右侧的物种 A 点(标签 3)会产生足够大的半径以包含靠近的物种 B 和物种 C 点,在这种情况下,我想要某种输出,可以识别物种 A 半径内的最大个体。
我想知道我可以在这个数据集上运行什么(如果有的话)以找到每个物种 A 点的最大“半径内”点并获得如下输出:
物种A点 ---- 半径内的最大点
物种 A 标签 1 ----- 物种 C 标签 9
物种 A 标记 2 ----- 物种 D 标记 10
物种 A 标签 3 ----- 物种 B 标签 5
物种A标签4 -----物种C标签8
我过去曾使用 spatstat 和 CTFSpackage 制作过一些图,但我不知道如何“找到半径内的最大邻居”。也许我可以在 ArcMAP 中解决这个问题?此外,这只是一个小的示例数据集。实际上,我会想为数千个点找到“半径内最大的邻居”。
任何帮助或反馈将不胜感激。
【问题讨论】:
-
在
base中,您可以将每个点到每个物种A 标记的欧几里得距离计算为sqrt((x1-x2)^2 + (y1-y2)^2)。一旦你有了一个到 Species A 标签的距离向量,你就可以使用像max(distances_vector[distances_vector < 40])这样的东西。看看你是否可以为单个案例设置它,然后为每个 Species A 标签进行迭代。 -
整个个体(或只是其中心的点)是否需要落入该半径范围内?
-
使用物种 A 标签 1,你有同样大小的 B 7……或者我理解不正确?
-
@JoshO'Brien 就在它的中心点。
-
@Headpoint Species A 标签 1 的尺寸为 0.10,Species B 标签 7 的尺寸为 0.15