2012-02-10 44 views
3

我有一個約3000點的空間數據框。我想生成一個矩陣,爲每個點提供k(在本例中爲30)最近鄰居。如何生成空間數據幀的k-最近鄰矩陣?

我可以使用一個循環,但我覺得應該有一個優雅和最佳的空間點數據框類,我不知道的方式。

回答

4

可能是最快的方法是使用RANN包 - 假設你有xy

library(RANN) 
m <- as.matrix(nn(data.frame(x=x, y=y, z=rep(0,length(x))), p=30)$nn.idx) 

給你最近的鄰國的3000×30矩陣。它比天真的二次搜索快幾個數量級。

編輯:只是爲了保持完整性,這不要緊,你選擇哪ANN前端,與FNN(由Spacedman建議)這將是

library(FNN) 
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index 
+0

它是如何比較來自包get.knn: FNN? – Spacedman 2012-02-10 08:14:23

+0

也許他們都使用ANN庫。這裏的小尺寸並不重要。上面的FNN會是'get.knn(data.frame(x = x,y = y),30)$ nn.index',所以選擇你喜歡的:)結果是一樣的。 – 2012-02-10 18:26:33