การแปลงข้อมูลจุดเป็นดาต้าเฟรมที่ถูกต้องสำหรับการวิเคราะห์ฮิสโตแกรมโดยใช้ R?


14

ฉันใหม่มากที่ใช้ข้อมูล GIS และมีประสบการณ์เพียงเล็กน้อยกับ R. ฉันได้อ่านเกี่ยวกับวิธีการวิเคราะห์ข้อมูลเชิงพื้นที่โดยใช้หนังสือ PDF spatial-analyst.net ดังนั้นฉันจึงไม่หลงทาง แต่ฉันคิดว่าฉันสามารถอธิบายได้ ปัญหาของฉันและผู้คนอาจแนะนำแนวคิด

ฉันมีชุดข้อมูลที่มีการวัดประมาณ 2,000 ชุดที่พิกัดละติจูด / ลองจิจูดที่แตกต่างกันถึงแม้ว่าฉันอาจจะแบ่งชุดข้อมูลนี้ออกเนื่องจากมีการรวบรวมข้อมูลมากกว่า 3 ปีและมีการเปลี่ยนแปลงเงื่อนไขเมื่อเวลาผ่านไป ลองเรียกตัวแปรที่วัดว่า "IP"

ฉันต้องการสร้างแผนที่ IP ในพื้นที่เต็มรูปแบบภายใต้คำถามโดยใช้ Kriging หรือวิธีการแก้ไขอื่น ๆ ในข้อมูลตัวอย่าง จากนั้นฉันต้องการสร้างฮิสโตแกรมที่วัดปริมาณที่ดินในถังเก็บไอพีแบบต่างๆ ฉันจะต้องสร้างฮิสโตแกรมซึ่งแสดงจำนวนตัวอย่างในถังแต่ละอัน (หมายเหตุตัวอย่างอาจมี IP จริงที่สูงกว่าหรือต่ำกว่าสิ่งที่ kriging คาดการณ์ไว้สำหรับที่ดินของตน)

ฉันติดตามวิธีการโหลดข้อมูลลงใน SpatialPointsDataFrame และเรียกใช้การวิเคราะห์ที่น่าสนใจซึ่งฉันมีปัญหาคือวิธีการแปลงข้อมูลนั้นเป็นดาต้าเฟรมที่มี gridded เพื่อให้ฉันสามารถวิเคราะห์ฮิสโตแกรมได้

มีข้อเสนอแนะสำหรับการแปลงคะแนนเป็นกริดหรือไม่?

คำตอบ:


12

คุณพูดถูก ... มันค่อนข้างง่าย! แพ็คเกจ "แรสเตอร์" มีวิธีการที่ค่อนข้างตรงไปตรงมาในการจัดการและสร้างแรสเตอร์

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) 

คุณสามารถกำหนดขนาดกริดและความละเอียดได้หลายวิธี - ดูที่เอกสารประกอบชุด raster

ค่าของเซลล์แรสเตอร์จากการแรสเตอร์สามารถคำนวณได้ด้วยฟังก์ชั่น - 'mean' ในตัวอย่างด้านบน ตรวจสอบให้แน่ใจว่าคุณใส่สิ่งนี้ใน: มิฉะนั้นจะใช้ค่าของ IP จากจุดสุดท้ายที่มันเจอ!


จาก 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)

เฮ้นี่มีประโยชน์มาก แต่รหัสจะดูอย่างไรถ้าฉันเริ่มด้วยจุดใน CSV แบบธรรมดาที่มี lat / longs มากกว่ารูปร่างไฟล์ คอลัมน์ใน CSV จะเป็น IP, Lat, Long, ฯลฯ และอื่น ๆ
user1080253

คุณระบุว่าคุณได้โหลดข้อมูลลงใน SpatialPointsDataFrame แล้ว ... ซึ่งเป็นสิ่งที่ptsอยู่ในตัวอย่างด้านบนของฉัน เพียงเรียกใช้รหัสบนวัตถุ SpatialPointsDataFrame ของคุณ!
Simbamangu

4
การตอบกลับนี้ถึงแม้จะยอดเยี่ยม แต่ดูเหมือนว่าจะไม่สามารถตอบสนองสิ่งที่ต้องการได้ (ดูเหมือนจะเสนอวิธีแก้ปัญหาให้กับgis.stackexchange.com/questions/20018แทน) ความท้าทายคือการแก้ไขจุด 2,000 หรือมากกว่านั้นไม่ใช่แค่กำหนดค่าของพวกมันให้กับเซลล์แรสเตอร์ เนื่องจาก OP อ้างว่ามีอยู่แล้ว "เรียกใช้การวิเคราะห์ที่น่าสนใจ" คำถามนี้ลงมาเพื่อแยกค่าของแรสเตอร์ (พูด, r) สำหรับใช้ในhistขั้นตอนเหมือนซึ่งเป็นเรื่องของการแสดงออกเช่นhist(getValues(r))นี้
whuber

@whuber - ดูเหมือน OP ขอให้ "ที่ฉันมีปัญหาคือวิธีการแปลงข้อมูลนั้นเป็นดาต้าเฟรมที่ gridded ดังนั้นฉันสามารถทำการวิเคราะห์ฮิสโตแกรม ... คำแนะนำสำหรับการแปลงคะแนนเป็นกริด" เป็นคำถามจริงและรู้วิธี เพื่อสร้าง SpatialPointsDataFrame และเรียกใช้การติดตาม แต่คุณถูกต้องดูเหมือนว่าจะซ้ำกันกับปีพ. ศ. 2561 (ยกเว้นอินพุตแบบ gridded)
Simbamangu

ขอโทษ, @ user1080253 ... ฉันอ่าน 'กริด' เป็น 'แรสเตอร์' ซึ่งไม่ถูกต้องและไม่เป็นประโยชน์สำหรับการถ่ายภาพ ดูที่นี่สำหรับแนวคิดที่ดีกว่าในการสร้างกริดปกติและแก้ไขข้อมูลของคุณกับกริดนั้น
Simbamangu

3

แพคเกจ plotKML vect2rastมีฟังก์ชั่นที่เรียกว่า ฟังก์ชั่นนี้จะขยายrasterizeฟังก์ชั่นที่มีอยู่ในแพ็คเกจแรสเตอร์โดยทั่วไป ข้อดีของvect2rast; อย่างไรก็ตามคือมันไม่จำเป็นต้องมีการป้อนข้อมูลจากด้านของผู้ใช้นั่นคือมันจะกำหนดขนาดของเซลล์กริดและกล่องขอบเขตโดยอัตโนมัติตามคุณสมบัติของชุดข้อมูลอินพุต ขนาดของเซลล์กริดนั้นประมาณจากความหนาแน่น / ขนาดของคุณสมบัติในแผนที่ ( nndistฟังก์ชั่นในแพคเกจ spatstat)

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.