2016-03-22 103 views
0

我有一個2列數據框對應於XY 500個地理參考觀測樣本的笛卡爾座標。 我要生成的權重矩陣W¯¯其中每個元素等於:
* :如果觀測Ĵk-最近鄰觀測之一
* :if else
假設我們有此數據幀:R,在矩陣中創建K最近鄰居權重

df=as.data.frame(cbind(x=rnorm(500), y=rnorm(500))) 

而讓假設K = 20,所以如何創建此矩陣爲R?

回答

0

使用CRAN的FastKNN包...比方說,你有5 * 5你的距離矩陣如下:

library(FastKNN) 
df <- as.data.frame(cbind(x = rnorm(5), y=rnorm(5))) 
dist_mat <- as.matrix(dist(df, method = "euclidean", upper = TRUE, diag=TRUE)) 

## Let's say k = 2... 
k <- 2 
nrst <- lapply(1:nrow(dist_mat), function(i) k.nearest.neighbors(i, dist_mat, k = k)) 

## Build w 
w <- matrix(nrow = dim(dist_mat), ncol=dim(dist_mat)) ## all NA right now 
w[is.na(w)] <- 0 ## populate with 0 
for(i in 1:length(nrst)) for(j in nrst[[i]]) w[i,j] = 1 

所以我df是這樣的:

> df 
      x   y 
1 -0.2109351 -0.315256132 
2 0.5172415 0.003352551 
3 1.5700413 -0.737475081 
4 -0.2699282 -0.198414683 
5 1.3997493 -0.241382737 

而且我w結束了尋找像這樣:

> w 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 0 1 0 1 0 
[2,] 1 0 0 1 0 
[3,] 0 1 0 0 1 
[4,] 1 1 0 0 0 
[5,] 0 1 1 0 0 
+1

我試過鱈魚e在我的大數據框架上,它的功能非常棒!謝謝 – Houssem