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

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

อ่าน: 1406
ความเห็น: 0

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

ความเข้าใจก็สำคัญไม่ยิ่งหย่อนไปกว่าสิ่งอื่น

ในบันทึกที่แล้วเราทำการแปลงข้อมูลที่เก็บในวัตถุที่มี class เป็น list ให้เป็น numeric vector ได้แล้วโดยใช้ฟังก์ชัน unlist() พร้อมทั้งเลือกมาเฉพาะพิกัดของ floodway สายตะวันตกหรือข้อมูล ๒๐๑ ค่า (๖๗ พิกัด พิกัดละ ๓ ค่า) เก็บไว้ในวัตถุที่มี class เป็น numeric ชื่อ test1.67.num

ข้อมูลที่เก็บในวัตถุ test1.67.num นี้จะเป็นข้อมูลที่เรียงต่อกันเป็นแถวเดียวหรือเป็นข้อมูลมิติเดียว

ดังนั้นข้อมูลพิกัดที่เก็บในวัตถุ test1.67.num จะเป็น

x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 ... x67 y67 z67

หลังจากนี้เราต้องทำข้อมูลที่เรียงต่อกันในแนวแถวเดียวกันให้เป็นข้อมูลที่มีมิติ ๒ มิติหรือที่เรียกว่า matrix นั่นเอง

สิ่งที่เราต้องจัดการคือทำให้ numeric vector กลายเป็น matrix ที่มี ๓ สดมภ์ ๖๗ แถว หรือข้อมูลต้องมีลักษณะเป็น

x1 y1 z1
x2 y2 z2
x3 y3 z3
...
x67 y67 z67

คงจำกันได้นะครับว่าหากเราต้องการเปลี่ยนจาก numeric vector ให้เป็น matrix หรือข้อมูลที่มี ๒ มิติ (dimension) นั้นเราจะใช้ฟังก์ชัน dim() โดยระบุจำนวนแถวและจำนวนสดมภ์ที่ต้องการ แต่จำนวนแถวและจำนวนสดมภ์เมื่อคูณกันแล้วต้องเท่ากับค่าทั้งหมดที่มี ขาดไม่ได้ เกินไม่ได้

ผมจะทำการสร้างวัตถุชื่อ test1.67.dim ขึ้นมาอีก ๑ วัตถุขึ้นมาโดยให้มีค่าและมี class เช่นเดียวกับวัตถุ test1.67.num โดยใช้คำสั่ง test1.67.dim <- test1.67.num

จากนั้นผมจะเปลี่ยนข้อมูลในวัตถุ test1.67.dim ให้เป็น matrix ที่มี ๖๗ แถว ๓ สดมภ์

> test1.67.dim <- test1.67.num
> dim(test1.67.dim) <- c(3,67)
> class(test1.67.dim)
[1] "matrix"
> test1.67.dim
          [,1]      [,2]      [,3]      [,4]      [,5]      [,6]     [,7]      [,8]     [,9]    [,10]    [,11]    [,12]    [,13]    [,14]    [,15]    [,16]
[1,] 100.07497 100.06355 100.05911 100.05066 100.04680 100.04488 100.0197 100.00044 99.99882 99.98922 99.98878 99.99428 99.99502 99.99192 99.99192 99.99415
--- ลบข้อมูลออกบางส่วน
         [,67]
[1,] 100.01962
[2,]  13.37173
[3,]   0.00000

โปรดสังเกต [,1] [,2] ... เป็นสิ่งที่บอกตำแหน่งของสดมภ์ และ [1,] [2,] [3,] เป็นสิ่งที่บอกตำแหน่งแถว

โปรดสังเกต dim(test1.67.dim) <- c(3,67) ทำไมผมระบุให้มีจำนวนแถวเป็น ๓ และมีจำนวนสดมภ์เป็น ๖๗ แทนที่จะเป็น ๖๗ แถว ๓ สดมภ์ตามที่ต้องการ

คงจำกันได้นะครับว่าการจัดเรียงข้อมูลจาก numeric vector ให้เป็น matrix นั้นโปรแกรม R จะจัดเรียงข้อมูลในแนวแถวก่อนแนวสดมภ์หรือข้อมูลในวัตถุ test1.67.dim นั้นจะมีการเรียงข้อมูลเป็น

x1 x2 x3 ... x67
y1 y2 y3 ... y67
z1 z2 z3 ... z67

หากเราระบุให้วัตถุ test1.67.dim มีจำนวนแถวเป็น ๖๗ และจำนวนสดมภ์เป็น ๓ แล้ว (dim(test1.67.dim) <- c(67,3)) การจัดเรียงข้อมูลก็จะเป็น

x1 y23 ...
y1 z23 ...
z1 x24 ...
x2 y24 ...
y2 z24 ...
z2 x25 ...
x3 y25 ...
y3 z25 ...
z3 x26 ...
...  ...  ...
x22 ... ...
y22 ... x67
z22 ... y67
x23 ... z67

นั่นคือโปรแกรม R จะจัดเรียงข้อมูลให้ครบ ๖๗ แถวก่อนแล้วจึงค่อยมาเรียงข้อมูลแถวในสดมภ์ที่ ๒ และ ๓ ตามลำดับ

โอกาสที่ข้อมูลจะจัดเรียงเป็น

x1 y1 z1
x2 y2 z2
x3 y3 z3
...
x67 y67 z67

อย่างที่เราต้องการด้วยคำสั่ง dim(test1.67.dim) <- c(3,67) หรือ dim(test1.67.dim) <- c(67,3) นั้นไม่มี

หากจำกันได้นะครับ หากเราต้องการให้โปรแรม R จัดเรียงข้อมูลในแนวสดมภ์ก่อนเราต้องใช้การ transpose ข้อมูล หรือใช้ฟังก์ชัน t() ช่วย

มาถึงตอนนี้เข้าใจแล้วใช่ไหมครับว่าทำไมผมถึงระบุจำนวนแถวเป็น ๓ และจำนวนสดมภ์เป็น ๖๗ แทนที่จะให้มีจำนวนแถวเป็น ๖๗ และสดมภ์เป็น ๓ ตามที่ต้องการ

เราทำการ transpose ข้อมูลที่เก็บไว้ในวัตถุ test1.67.dim ให้กลายเป็น ๖๗ แถว ๓ สดมภ์ ด้วยฟังก์ชัน t() แล้วเก็บข้อมูลที่ transpose แล้วเก็บไว้ในวัตถุที่ชื่อ test1.67.dim2

> test1.67.dim2 <- t(test1.67.dim)
> test1.67.dim2
           [,1]     [,2] [,3]
 [1,] 100.07497 15.23082    0
 [2,] 100.06355 15.22436    0
 [3,] 100.05911 15.21749    0
 -- ลบข้อมูลออกบางส่วน
[66,]  99.89306 14.40356    0
[67,] 100.01962 13.37173    0

เท่านี้เราก็ได้ข้อมูลที่เป็น ๖๗ แถว ๓ สดมภ์โดยที่มีการเรียงข้อมูลตามที่เราต้องการคือ

x1 y1 z1
x2 y2 z2
x3 y3 z3
...
x67 y67 z67

นั่นคือเมื่อใช้ฟังก์ชัน t() โปรแกรม R จะทำการพลิกข้อมูลที่เป็นแถวให้เป็นสดมภ์ ข้อมูลที่เป็นสดมภ์กลับเป็นแถว หรือจับข้อมูลหมุน ๙๐ องศาตามเข็มนาฬิกา

คราวนี้มาลอง plot ค่า coordinates ที่ได้มาว่าหน้าตาเป็นอย่างไร

สั่ง plot ด้วยคำสั่ง

plot(test1.67.dim2,col="blue", pch=16)

หน้าตาออกมาเป็นดังรูปนี้ครับ

ในคำสั่ง plot (x, y plot) กำหนดสีให้เป็นสีน้ำเงิน (col="blue") กำหนดสัญลักษณ์ตรงจุดตัด x y ให้เป็นจุดทึบกลม (pch=16)

เรามาพักกันก่อนดีไหมครับ

เราเอง

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

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

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

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