รับกล่องขอบเขตฉันจะนับจำนวนค่าเฉพาะได้อย่างไร (พูดว่าฉันสนใจจำนวนvalue == 1
) ในแรสเตอร์ใน 1) arcpy หรือ 2) แพ็คเกจแรสเตอร์ใน R
รับกล่องขอบเขตฉันจะนับจำนวนค่าเฉพาะได้อย่างไร (พูดว่าฉันสนใจจำนวนvalue == 1
) ในแรสเตอร์ใน 1) arcpy หรือ 2) แพ็คเกจแรสเตอร์ใน R
คำตอบ:
ในR
ใช้crop
เพื่อแยกค่าและ ( เช่น ) table
เพื่อนับค่า
ตัวอย่างเช่นลองสร้างกริด 1 องศาครอบคลุมโลก:
library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)
กล่อง bounding ถูกแปลงเป็นextent
วัตถุเพื่อใช้crop
:
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
การทำเช่นนั้นทำให้การจัดระเบียบเป็นเรื่องง่าย:
table(getValues(y.raster))
ในเอาต์พุตนี้แถวแรกแสดงรายการค่าและรายการที่สองแสดงจำนวนที่สอดคล้องกัน:
165 166 167 ... 257 258
1 2 3 ... 2 1
เพื่อเป็นการตรวจสอบเราสามารถวางแผนแรสเตอร์และขอบเขต:
plot(x.raster)
plot(y.extent, add=T)
การเพิ่มเล็กน้อย: คุณสามารถใช้ฟังก์ชัน (หน่วยความจำที่ปลอดภัย) "freq":
ทำตามคำตอบโดย whuber:
library(raster)
x.raster <- raster(outer(179:0, 0:359, '+'), xmn=-180, xmx=180, ymn=-90, ymx=90)
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
แต่ตอนนี้ทำ:
freq(y.raster)
มันสำคัญสำหรับวัตถุที่มีขนาดใหญ่มากเท่านั้น (แรสเตอร์ในไฟล์) 'freq' ส่งคืนเมทริกซ์สองคอลัมน์ (ค่า / จำนวน) ในขณะที่ 'table' ส่งคืนตาราง
crop
ปฏิบัติการหนึ่งนาทีบนกริดโลกซึ่งมี 10800 แถวและ 21600 คอลัมน์ (233,280,000 เซลล์) การครอบตัดถูกดำเนินการในเวลาที่ผ่านไปทั้งหมด 1.36 วินาที
v <- extract(x.raster, y.extent)
ตามด้วย table(v)
extract
มาจากไหน มันไม่ได้เป็นส่วนหนึ่งraster
และR
ระบบช่วยเหลือ ( ??
) ไม่พบฟังก์ชันใด ๆ ที่ใช้ชื่อนี้เช่นกัน