Pertanyaan saya adalah tentang mengekstraksi nilai dari raster di lokasi titik. Dengan ekstrak fungsi ini sangat mudah, dan fungsinya memberi saya bingkai data dengan nilai-nilai semua variabel dalam titik. Saya ingin memiliki dalam dataframe koordinat setiap titik. Bagaimana saya bisa mewujudkannya? Apakah mungkin untuk mengatakan kepada R bahwa ketika mengekstraksi nilai-nilai dari raster juga menambahkan kolom titik lokasi.
Ini adalah prosedur saya:
presencias=read.table("c:/SDM_R/presencias/P_lentiscus_pres.csv",header=TRUE,sep=";")
lista_variables <-list.files(path="Variables_modelizacion/solo_ascii",pattern='*.asc',full.names=TRUE)
variables <- stack(lista_variables)
variables_presencia<-extract(variables, presencias)
hasilnya kira-kira seperti ini:
> bio1 bio12 bio18 bio2 bio4
> 90 875 165 95 4886
> 115 1085 158 83 4075
> 135 1153 153 67 3402
> 85 1026 137 99 5203
> 96 667 128 108 5823
> 98 531 109 113 6305
> 132 450 63 123 6598
> 132 569 104 106 5963
> 95 814 196 98 5571
> 146 474 39 114 6603
Tapi saya ingin dua kolom lagi dengan data koordinat (tapi bisa juga kolom lain dari tabel lokasi csv saya).
Terima kasih banyak.
presencias
?cbind(coordinates(presencias), variables_presencia)
? Anda kemudian dapat mengonversi ke menggunakan SPDFcoordinates(result) <- ~ X + Y
dan Anda dapat menggunakan kebanyakan metode yang dirancang untuk objek spasial lagi.Jawaban:
Dengan asumsi
presencias
danvariables
berbagi proyeksi yang sama, ini seharusnya menjadi tugas yang mudah. Saya sarankan Anda untuk menambahkan baris kode ini setelahread.table()
pernyataan Anda untuk mengkonversipresencias
dataframe ke objek SpatialPointsDataFrame (cukup perbaiki nama kolom yang berisi koordinat x dan y jika berbeda dari contoh saya).Untuk memberikan contoh yang dapat direproduksi, saya mencoba sedikit membuka cakupan jawaban saya. Pertama-tama, unduh dan unzip shapefile ESRI ini dengan lokasi yang kurang lebih penting di Jerman. Ini akan berfungsi sebagai data titik nanti. Anda juga akan membutuhkan paket
dismo
,rgdal
danraster
untuk contoh singkat ini, jadi pastikan bahwa perpustakaan ini (dan semua dependensinya) diinstal pada hard drive lokal Anda.Mari kita mulai dengan memuat paket yang diperlukan.
Selanjutnya, Anda harus membuat sampel RasterLayer. Dalam kasus kami, kami akan menggunakan
gmap()
fungsi daridismo
paket untuk mendapatkan peta fisik Jerman.Anda sekarang dapat mengimpor shapefile titik Anda melalui
readOGR
darirgdal
paket R. Pastikan untuk menyesuaikan nama sumber data (dsn = ...). Keseluruhan hal-hal proyeksi sudah usang dalam kasus khusus Anda. Namun, itu harus dilakukan dalam contoh kami agar berhasil menamparkan data poin kami dengan German RasterLayer.Untuk mengurangi ukuran besar dari data titik kami, kami akan menggambar sampel acak dari sepuluh lokasi di Jerman. Ini sudah cukup untuk tujuan kita.
Sekarang setelah persiapan selesai, kita bisa mulai mengekstraksi nilai piksel tertentu yang ada di sepuluh titik sampel acak kami.
Untuk menggabungkan koordinat titik dengan nilai piksel yang diekstraksi, kita hanya perlu menyiapkan kerangka data yang berisi koordinat SpatialPointsDataFrame kami. Itu dia!
sumber
Tentunya Anda bisa melakukannya:
variables_presencia$x <- presencias['x']
variables_presencia$y <- presencias['y']
(menganggap data koordinat Anda ada dalam dua kolom yang disebut 'x' dan 'y')
sumber