Konversi data titik ke dalam kerangka data grid untuk analisis histogram menggunakan R?

14

Saya sangat baru dalam menggunakan data GIS dan hanya sedikit berpengalaman dengan R. Saya telah membaca tentang bagaimana menganalisis data spasial menggunakan buku PDF spatial-analyst.net, jadi saya tidak sepenuhnya hilang, tapi saya pikir saya bisa menggambarkan masalah saya dan orang mungkin menyarankan ide.

Saya memiliki dataset dengan sekitar 2000 pengukuran pada koordinat lat / long yang berbeda, meskipun saya mungkin akan membagi dataset ini karena data dikumpulkan selama 3 tahun dan kondisinya berubah dari waktu ke waktu. Mari kita sebut variabel yang diukur "IP."

Saya ingin membuat peta IP di area penuh yang dipertanyakan menggunakan Kriging atau metode interpolasi lainnya pada data sampel. Lalu saya ingin membuat histogram yang mengukur jumlah lahan di berbagai ember IP. Saya juga perlu membuat histogram yang menunjukkan jumlah sampel dalam setiap ember (perhatikan sampel bisa memiliki IP aktual yang lebih tinggi atau lebih rendah dari apa yang diprediksi kriging untuk lahannya).

Saya mengikuti cara memuat data ke dalam SpatialPointsDataFrame dan menjalankan analisis kriging, di mana saya mengalami masalah adalah bagaimana mengkonversi data itu ke dalam kerangka data yang disambungkan sehingga saya dapat melakukan analisis histogram.

Adakah saran untuk mengubah poin menjadi kisi?

pengguna1080253
sumber

Jawaban:

12

Anda benar ... itu sangat mudah! Paket "raster" memiliki beberapa cara langsung untuk membuat dan memanipulasi raster.

library(maptools)
library(raster)

# Load your point shapefile (with IP values in an IP field):
pts <- readShapePoints("pts.shp")

# Create a raster, give it the same extent as the points
# and define rows and columns:

rast <- raster()
extent(rast) <- extent(pts) # this might be unnecessary
ncol(rast) <- 20 # this is one way of assigning cell size / resolution
nrow(rast) <- 20

# And then ... rasterize it! This creates a grid version 
# of your points using the cells of rast, values from the IP field:
rast2 <- rasterize(pts, rast, pts$IP, fun=mean) 

Anda dapat menetapkan ukuran dan resolusi kisi dalam beberapa cara - lihat dokumentasi paket raster dengan baik.

Nilai sel raster dari rasterize dapat dihitung dengan fungsi - 'rata-rata' dalam contoh di atas. Pastikan Anda memasukkan ini ke dalam: jika tidak, ia hanya menggunakan nilai IP dari titik terakhir !


Dari CSV:

pts <- read.csv("IP.csv")
coordinates(pts) <- ~lon+lat
rast <- raster(ncol = 10, nrow = 10)
extent(rast) <- extent(pts)
rasterize(pts, rast, pts$IP, fun = mean)
Simbamangu
sumber
Hai ini sangat berguna, tetapi bagaimana kode terlihat jika saya mulai dengan poin dalam CSV sederhana dengan lat / long daripada sebuah shapefile? Kolom dalam CSV adalah IP, Lat, Long, dll, dll, dll.
user1080253
Anda memang mengindikasikan bahwa Anda telah memuat data ke dalam SpatialPointsDataFrame ... yang persis seperti yang ptsada dalam contoh saya di atas. Cukup jalankan kode pada objek SpatialPointsDataFrame Anda!
Simbamangu
4
Jawaban ini, walaupun luar biasa, tampaknya tidak membahas apa yang dibutuhkan. (Tampaknya menawarkan solusi untuk gis.stackexchange.com/questions/20018 sebagai gantinya.) Tantangannya adalah untuk menginterpolasi 2000 atau lebih poin, tidak hanya menetapkan nilainya ke sel raster. Mengingat bahwa OP mengklaim telah "menjalankan analisis kriging," pertanyaan ini muncul untuk mengekstraksi nilai-nilai raster (katakanlah r) untuk digunakan dalam histprosedur yang mirip, yang hanya masalah ekspresi hist(getValues(r)).
Whuber
@whuber - Sepertinya OP bertanya "di mana saya mengalami masalah adalah bagaimana mengubah data itu menjadi kerangka data yang disambungkan sehingga saya dapat melakukan analisis histogram ... saran untuk mengubah titik menjadi kotak" sebagai pertanyaan yang sebenarnya, dan tahu bagaimana caranya untuk membuat SpatialPointsDataFrame dan menjalankan kriging. Tapi Anda benar, itu sepertinya duplikat dari 20018 (kecuali untuk input gridded).
Simbamangu
Maaf, @ user1080253 ... Saya membaca 'grid' sebagai 'raster' yang tidak benar, dan tidak membantu untuk kriging; lihat di sini untuk ide yang lebih baik tentang membuat kisi-kisi biasa dan menyisipkan data Anda ke kisi itu.
Simbamangu
3

Paket plotKML memiliki fungsi yang disebut vect2rast. Fungsi ini pada dasarnya memperluas rasterizefungsi yang tersedia dalam paket raster. Keuntungan dari vect2rast; Namun, adalah bahwa ia tidak memerlukan input dari sisi pengguna yaitu secara otomatis menentukan ukuran sel grid dan kotak pembatas berdasarkan pada properti dari set data input. Ukuran sel kisi diperkirakan berdasarkan kepadatan / ukuran fitur di peta ( nndistfungsi dalam paket spatstat).

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
HassanSh__3571619
sumber