นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
Network
Members · Following: 0 · Followed: 16

อ่าน: 1641
ความเห็น: 2

ก้าวย่าง ทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: KML vs R ยกที่ ๑๐

และแล้วก็จับ ๒ สายมารวมกัน

หลังจากที่เรานำเข้า coordinates ของ floodway สายตะวันตกจากแฟ้มข้อมูล kml สู่โปรแกรม R และเก็บไว้ในวัตถุที่เป็น Spatial Data เรียบร้อยแล้วก็มาถึงคราวที่เราจะนำเอา coordinates ของ floodway สายตะวันออกมาบ้าง

คำสั่งหรือแนวคิดก็เป็นแบบเดียวกับข้อมูล coordinates ของ floodway สายตะวันตกทุกอย่างครับ

มาดูขั้นตอนโดยสรุปและคำสั่งต่างๆ ที่ใช้ดึงข้อมูล coordinates ของ floodway สายตะวันตกกันนะครับ

> library(maptools)
> test1 <- getKMLcoordinates("c:/Rworkplace/kml/doc.kml", ignoreAltitude=FALSE)
> test1.67.num <- c(unlist(test1))[1:201]
> test1.67.dim <- test1.67.num
> dim(test1.67.dim) <- c(3,67)
> test1.67.dim2 <- t(test1.67.dim)
> test1.67.dat <- data.frame(test1.67.dim2)
> coordinates(test1.67.dat) <- ~X1+X2

สรุปแล้วคำสั่งที่เราใช้ทั้งหมดก็มีประมาณ ๘ คำสั่งเท่านั้นเองครับ ส่วนคำสั่งอื่นๆ นั้นเป็นการตรวจสอบข้อมูล หรือตรวจสอบ class ของวัตถุเท่านั้น

แต่ทั้งนี้ทั้งนั้นเราต้องเข้าใจข้อมูลมาก่อนถึงจะใช้คำสั่งเพียง ๘ คำสั่งนี้ได้ หรือเราสามารถลดคำสั่งได้อีก ๑-๒ คำสั่งครับ

ลองไปทำกันเล่นๆ ดูเองเองนะครับ

คราวนี้มาถึงการดึงเอา coordinates ของ floodway ฝั่งตะวันออกกันแล้วนะครับ ผมจะไม่อธิบายคำสั่งเพิ่มเติมนะครับ เพียงแต่ปรับเปลี่ยนค่าต่างๆ จากคำสั่งที่ดึงข้อมูล coordinates สายตะวันตกนิดหน่อย

อันที่จริงแล้วเราสามารถรวบยอดทำทีเดียวทั้ง ๒ สายได้เลยครับ

แต่เพื่อเป็นการเรียนรู้และให้ง่ายต่อการเข้าใจในข้อมูล ผมก็เลยทำแยกครั้งละสายก่อน

ผมจะดึงข้อมูล coordinates ของ floodway สายตะวันออกมาเก็บไว้ในวัตถุที่ชื่อ test1.312.dat

ทำไมถึงเป็น 312 ?

คงจำกันได้นะครับว่าจากคำสั่ง unlist(test1) นั้น พบว่ามีข้อมูลเรียงกันทั้งหมด ข้อมูล 515 ข้อมูล

> unlist(test1)
  [1] 100.07497  15.23082   0.00000 100.06355  15.22436   0.00000 100.05911  15.21749   0.00000 100.05066  15.21275   0.00000 100.04680  15.20974   0.00000
 --- ลบข้อมูลออกบางส่วน
[511]   0.00000 100.88918  13.46591   0.00000        NA

ตัวเลข 511 ในเครื่องหมาย [ ] ([511]) หมายถึงค่าแรกของแถวเป็นตำแหน่งที่ 511 ของข้อมูล (0.00000) ที่เกิดจากคำสั่ง unlist(test1)

ข้อมูลค่าสุดท้ายที่เกิดจากคำสั่ง unlist(test1) มีค่าเป็น "NA"

เราจะไม่นำค่า "NA" มารวมเป็นค่า coordinates ดังนั้นเราจึงไม่เอาค่าสุดท้าย (ตำแหน่งที่ 515) มา ค่าสุดท้ายที่นำมาจึงเป็น 514

จากข้อมูล coordinates floodway สายตะวันตก เราดึงข้อมูล coordinates จากลำดับที่ 1 ถึง ลำดับที่ 201 (test1.67.num <- c(unlist(test1))[1:201]) แต่ทำไมเราเริ่มดึงข้อมูล coordinates floodway ในแนวตะวันออกจากตำแหน่ง 203 ไม่ใช่ตำแหน่ง 202

คำตอบก็คือค่าท้ายสุดของแต่ละจุดนั้นหรือค่าที่เก็บอยู่ใน list แต่ละ list ที่อยู่ภายในวัตถุ test1 นั้นเมื่อใช้ฟังก์ชัน unlist(test1) จะได้ค่าสุดท้ายของแต่ละ list เป็น "NA" นั่นคือค่าที่ถัดจากตำแหน่ง 201 หรือตำแหน่ง 202 นั้นเป็นค่า "NA" นั่นเอง

เราจึงเริ่มดึงข้อมูลจากตำแหน่งที่ 203

ดังนั้นเริ่มดึงข้อมูลจากตำแหน่งที่ 203 จนถึงตำแหน่งที่ 514 จากผลลัพธ์ของการใช้ฟังก์ชัน unlist(test1) นับรวมจำนวน coordinates ได้ 312 ชุด

ดังนั้นคำสั่งสำหรับดึงข้อมูล coordinates ของ floodway สายตะวันออกจากวัตถุ test1 จึงเป็น

> test1.312.num <- c(unlist(test1))[203:514]

หรือเราจะนับจำนวนค่าทั้งหมดที่อยู่ภายในวัตถุ test1.312.num ได้โดยใช้ฟังก์ชัน length(x)

> length(test1.312.num)
[1] 312

คำสั่งที่เหลือจึงเป็น

> test1.312.dim <- test1.312.num
> dim(test1.312.dim) <- c(3,104)
> test1.312.dim2 <- t(test1.312.dim)
> test1.312.dat <- data.frame(test1.312.dim2)
> coordinates(test1.312.dat) <- ~X1+X2
> plot(test1.312.dat, col="red", pch=16)

ผลจากการ plot จะได้เป็นรูป

ทวนกันอีกทีนะครับว่า จำนวนสดมภ์และแถวที่ระบุสำหรับการเปลี่ยน numeric vector ให้เป็น matrix นั้น จำนวนแถวคูณกับจำนวนสดมภ์ต้องเท่ากับจำนวนข้อมูลที่มีอยู่ในวัตถุนั้นๆ ขาดไม่ได้ เกินไม่ได้ ดังนั้น เราจึงระบุให้จำนวนแถวเท่ากับ ๓ และจำนวนสดมภ์เท่ากับ ๑๐๔ (๓x๑๐๔=๓๑๒)

คราวนี้เรามา plot ข้อมูล floodway ทั้งสองสายเข้าด้วยกัน

> plot(test1.67.dat, col="blue", pch=16)
> plot(test1.312.dat, col="red", pch=16, add=TRUE)

จะได้ผลดังรูปครับ

เป็นอันว่าบันทึกในซีรีย์ kml VS R จบลงแล้วนะครับ ^_^

เราเอง

ปล. รูปในบันทึกนี้ลิงค์มาจาก server share


หมวดหมู่บันทึก: บริการวิชาการ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 03 เมษายน 2555 02:28 แก้ไข: 03 เมษายน 2555 02:28 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 DaDa, Ico24 ServiceMan, และ 2 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

มาเป็น series เลยนะครับ ตามอ่านบ้างไม่อ่านบ้าง เข้าบ้างไรบ้าง ไม่ว่ากันนะ...

 

เอิ้ก เอิ้ก

 

"ใจสั่งมา"

ตามแบบห่าง ๆ ครับ รู้ว่าการได้ข้อมูลมา plot ให้ถูกต้องก็ต้องลงแรงเยอะนะครับ

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.94.129.211
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ