Bagaimana cara mendapatkan tetangga terdekat kedua antara dua pola titik di R?


12

Apakah ada cara untuk mendapatkan jarak tetangga terdekat kedua antara dua pola titik dalam R? Paket spatstat memiliki fungsi yang disebut nncross tetapi hanya berlaku untuk tetangga terdekat antara dua pola dan saya perlu jarak ke tetangga terdekat kedua.

Jawaban:


9

Fungsi get.knnx dalam paket FNN dapat menghitung N-tetangga terdekat dalam pola titik.

x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)

sekarang nn $ nn.index adalah sebuah matriks sehingga nn $ nn.index [i, j] adalah baris dalam x1 dari dua tetangga terdekat ke baris i di x2 - disortir sehingga yang terdekat adalah [i, 1], dan tetangga berikutnya adalah [i, 2].

Fungsi ini juga mengembalikan jarak untuk Anda, dan memiliki beberapa opsi untuk menghitung indeks spasial untuk pencarian yang sangat cepat.


Terima kasih. Namun, ada sedikit masalah. Data saya adalah kelas 'ppp' (untuk digunakan dengan spatstat). Ketika saya mencolokkannya ke get.knnw, saya mendapatkan kesalahan berikut> Kesalahan di get.knnx (rp, ponderosa, 2): daftar harus diduplikasi di .C
RK

Keluarkan koordinat menggunakan as.data.frame pada objek ppp Anda.
Spacedman

Apakah nndist dan nn yang juga siap untuk tugas ini? Hanya memperhatikan dua fungsi ini pada daftar r-sig-geo hari ini ...
Roman Luštrik

nndist dan nn yang hanya menghitung jarak terdekat dalam satu pola titik (yang merupakan apa yang get.knn lakukan), bukan dari satu jenis titik ke jenis titik lainnya (yang dilakukan oleh get.knnx). Juga, get.knn dua kali lebih cepat dari nndist jika Anda menggunakan algoritme = "kd_tree".
Spacedman

@Spacedman Mengerti. Terima kasih sobat. Saya baru saja melihat crossdist. Tampaknya bekerja seperti get.knnx. Akan mencobanya juga. Saya akhirnya menggunakan cbind dan kemudian mendapatkan koordinat X dan Y sebelum saya membaca komentar Anda. Terima kasih banyak. R newbie di sini. Kebanyakan pria Python.
RK

6

Saya baru saja menemukan bahwa spatstat memiliki fungsi crossdist .

Deskripsi

Menghitung jarak antara pasangan 'barang' yang diambil dari dua dataset berbeda.

Dibutuhkan dua pola titik X dan Y sebagai input, dan mengembalikan matriks yang entri [i, j] adalah jarak dari X [i] ke Y [j]. Untuk mendapatkan tetangga terdekat kedua menggunakan crossdist:

xdistances <- crossdist(X, Y)  #Get all cross distances    

nn = numeric() 
for (i in 1:nrow(X)) {   
  xdistance <- sort(xdistances[i,], partial=2)[2]   
  nn <- append(nn, xdistance)
}

Saya tahu saya sudah menerima jawaban Spacedman tetapi saya ingin membagikan bagaimana saya melakukannya dengan cara lain.


0

Fungsi nndistdalam spatstatpaket memiliki argumen kyang menentukan urutan tetangga. Untuk mendapatkan jarak tetangga terdekat kedua, gunakan k=2. Untuk mendapatkan tetangga pertama dan kedua, gunakan k=1:2.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.