我有一个使用 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/