r - 将最近邻距离表转换为矩阵

标签 r matrix nearest-neighbor

我有一个使用 RANN 包计算最近邻 (K=2) 生成的数据帧。我想将这些数据转换为每个单元格值为 0,1,2 的矩阵,其中 0 = 非邻居,1 = 最近邻居,2 = 第二个最近邻居。

数据框有两列,第一列是第一个 NN 的 ID,第二列是第二个 NN 的 ID。这些行对应于计算 NN 的点的 ID。

是否有现有的例程可以轻松进行此类转换?

谢谢

最佳答案

根据您给出的有限想法,我认为这是一个不漂亮的解决方案:

 NNdf <- data.frame(NN1=c(1,2,4),NN2=c(2,3,1)) # make up some data
 NNdf$origin <- rownames(NNdf)

 NNdf
#  NN1 NN2 origin
#1   1   2      1
#2   2   3      2
#3   4   1      3


 library(reshape2)
 hold <- melt(NNdf, id = "origin")
 hold
#  origin variable value
#1      1      NN1     1
#2      2      NN1     2
#3      3      NN1     4
#4      1      NN2     2
#5      2      NN2     3
#6      3      NN2     1


 hold2 <- dcast(hold, origin~value, value.var="variable")

 hold2[hold2 == "NN1"]  <- 1
 hold2[hold2 == "NN2"]  <- 2
 hold2[is.na(hold2) ]   <- 0

 hold2
#  origin 1 2 3 4
#1      1 1 2 0 0
#2      2 0 1 2 0
#3      3 2 0 0 1

(这可能依赖于之后的 apply(hold2,1,as.numeric))

关于r - 将最近邻距离表转换为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541481/

相关文章:

algorithm - ANN 搜索能否在具有高维表示的大型数据库中超越 NN 搜索的准确性?

arrays - 在格上有效地计算邻居的功能

c++ - 在像素的最近邻插值 OpenGL 中心的情况下会发生什么

r - 在 R 中将 cURL 转换为 httr

在 R 中用 textclean 替换表情符号对我来说并不完全有效

c - 在C编程中需要将每个3个矩阵中的3个最大数字放入1个单矩阵中

algorithm - 如何最有效地在矩阵中找到给定大小的等值矩形区域?

opengl - 顶点着色器中的变换仅适用于后乘法

MCMCglmm 中的重复测量

r - 如何更改集群中每个组的树状图颜色