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

Our Shangri-La
Ico64
Kittisakdi Choomalee

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

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

ก้าวย่างทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: Titanic ฉบับ rate R # ๖ [C]

มาขยาย (expand) ข้อมูล Titanic จาก table ให้เป็น data frame กันเถอะ

บันทึกที่เกี่ยวข้อง

เราต้องขยายหรือเพิ่มจำนวนซ้ำของข้อมูลในแต่ละกลุ่มให้เท่ากับความถี่ของกลุ่ม

โดยเราจะเก็บข้อมูลที่สร้างขึ้นใหม่ใน matrix เดียวกัน

matrix ที่เราจะสร้างขึ้นเพื่อเก็บข้อมูลนั้นจะต้องมีขนาดเท่าไหร่ หรือมีกี่แถวกี่สดมภ์

จากข้อมูลผลรวมทั้งหมดของ Titanic dataset ชุดนี้ ทำให้ทราบว่ามีจำนวนคนทั้งหมด ๒๒๐๑ คน ตัวแปรของข้อมูลชุดนี้มี ๔ ตัวแปร ดังนั้น matrix ที่เราจะสร้างขึ้นต้องมีขนาดเท่ากับ ๒๒๐๑ x ๔ เพื่อใช้เก็บข้อมูลทั้งหมด ๘,๘๐๔ ข้อมูล

เริ่มต้นด้วยการสร้างวัตถุที่เก็บข้อมูล NA โดยให้ชื่อว่า titanix

> titanix <- NA

จากนั้นเปลี่ยน class ของ titanic ให้เป็น matrix ที่มีข้อมูล NA ขนาด ๒๒๐๑ x ๔ ด้วยบรรทัดคำสั่ง

> titanix <- matrix(titanix,nrow=2201, ncol=4)

ตรวจสอบ matrix titanix

> head(titanix)
     [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   NA   NA   NA   NA
[4,]   NA   NA   NA   NA
[5,]   NA   NA   NA   NA
[6,]   NA   NA   NA   NA

ข้อมูลกลุ่มแรกที่เราต้องการสร้างขึ้นก็คือกลุ่มที่มีลักษณะ

  Class    Sex   Age Survived Freq
3    3rd   Male Child       No   35

จำนวนที่ต้องสร้างขึ้นคือ ๓๕ ข้อมูล

ในที่นี้เราจะใช้ฟังก์ชัน rep(x) Replicate Elements of Vectors and Lists สำหรับการสร้างจำนวนซ้ำของข้อมูล ซึ่งต้องสร้างข้อมูลขึ้นทั้ง ๔ ตัวแปร

เราให้ข้อมูลแต่ละตัวแปรเก็บไว้ในวัตถุที่ชื่อ pclass sex age และ survived ตามลำดับ

 

ผู้โดยสารชั้น ๓ จำนวน ๓๕ คน

 

บรรทัดคำสั่ง

> pclass <- rep("3rd",35)


เพศชาย จำนวน ๓๕ คน

 

บรรทัดคำสั่ง

> sex <- rep("male", 35)

เด็ก จำนวน ๓๕ คน

บรรทัดคำสั่ง

> age <- rep("child", 35)

เป็นผู้เสียชีวิต จำนวน ๓๕ คน

บรรทัดคำสั่ง

> survived <- rep("No", 35)

นำข้อมูลที่สร้างขึ้นทั้ง ๔ ตัวแปร ตัวแปรละ ๓๕ ข้อมูลมารวมกันในแนวตั้งโดยใช้ฟังก์ชัน cbind()

เราอาจจะดูผลลัพธ์ของฟังก์ชัน cbind() ได้จากบรรทัดคำสั่งด้านล่าง

> head(cbind(pclass,sex,age,survived))
     pclass sex    age     survived
[1,] "3rd"  "male" "child" "No"   
[2,] "3rd"  "male" "child" "No"   
[3,] "3rd"  "male" "child" "No"   
[4,] "3rd"  "male" "child" "No"   
[5,] "3rd"  "male" "child" "No"   
[6,] "3rd"  "male" "child" "No"

นำข้อมูลที่นำมารวมกันในแนวตั้ง (ใช้ข้อมูลแต่ละวัตถุ (pclass, sex, age และ surviced) มาเป็นสดมภ์) แล้วให้เก็บค่าเหล่านี้ไว้ใน matrix titanix ในแถวที่ ๑ ถึง แถวที่ ๓๕

บรรทัดคำสั่ง

> titanix[1:35,] <- cbind(pclass,sex,age,survived)

ตรวจสอบผลลัพธ์ที่ได้ หรือตรวจสอบข้อมูลใน matrix titanix


> head(titanix)
     [,1]  [,2]   [,3]    [,4]
[1,] "1st" "male" "child" "No"
[2,] "1st" "male" "child" "No"
[3,] "1st" "male" "child" "No"
[4,] "1st" "male" "child" "No"
[5,] "1st" "male" "child" "No"
[6,] "1st" "male" "child" "No"

ตรวจสอบข้อมูลใน matrix titanix ในแถวท้าย ๆ ของ matrix

> tail(titanix)
        [,1] [,2] [,3] [,4]
[2196,] NA   NA   NA   NA
[2197,] NA   NA   NA   NA
[2198,] NA   NA   NA   NA
[2199,] NA   NA   NA   NA
[2200,] NA   NA   NA   NA
[2201,] NA   NA   NA   NA

ในแถวแรก ๆ ของ matrix titanix นั้นถูกบรรจุด้วยข้อมูลที่เราสร้างขึ้นจำนวน ๓๕ ชุดแล้ว ส่วนแถวท้าย ๆ ของ matrix titanix ยังเป็นข้อมูลว่างอยู่ (NA)

เราทำการสร้างชุดข้อมูลที่ ๒ ซึ่งคือกลุ่ม

   Class    Sex   Age Survived Freq
7    3rd Female Child       No   17

เป็นผู้โดยสารชั้น ๓ เพศหญิง เป็นเด็ก เสียชีวิต จำนวน ๑๗ คน

นั่นคือเราต้องสร้งข้อมูลที่ pclass = 3rd, sex=female, age=child และ survived=No จำนวน ๑๗ ซ้ำ

เราเก็บข้อมูลของแต่ละตัวแปรที่สร้างขึ้นใหม่ในวัตถุที่ชื่อ pclass sex age และ survived เช่นเดิม

ข้อมูลเดิมที่ถูกสร้างขึ้นครั้งแรกจะถูกแทนที่ด้วยข้อมูลชุดใหม่ที่สร้างขึ้นโดยอัตโนมัติ (ลบข้อมูลเดิมออกแทนที่ด้วยข้อมูลชุดใหม่)

บรรทัดคำสั่ง

> pclass <- rep("3rd",17)
> sex <- rep("female", 17)
> age <- rep("child", 17)
> survived <- rep("No", 17)

ตรวจสอบตำแหน่งที่จะแทนที่ข้อมูลใน matrix titanix

ชุดข้อมูลแรกเริ่มตั้งแต่แถวที่ ๑ ถึงแถวที่ ๓๕ (ข้อมูลชุดแรกมี ๓๕ ชุดข้อมูล) ดังนั้นข้อมูลชุดที่ ๒ ที่สร้างขึ้นต้องเริ่มตั้งแต่แถวที่ ๓๖ ของ matrix titanix

แถวสุดท้ายของข้อมูลชุดที่ ๒ คือแถวที่เท่าไหร่ หาตำแหน่งแถวสุดท้ายของข้อมูลชุดที่ ๒ โดยบรรทัดคำสั่ง

> 36+17-1
[1] 52

ข้อมูลแถวแรกของชุดข้อมูลที่ ๒ คือแถวที่ ๓๖ บวกด้วยจำนวนข้อมูลทั้งหมดคือ ๑๗ ลบออกด้วย ๑ ดังนั้นแถวสุดท้ายของข้อมูลชุดที่ ๒ คือ ๕๒

เก็บข้อมูลชุดที่ ๒ในแถวที่ ๓๖ ถึงแถวที่ ๕๒ ของ matrix titanix

บรรทัดคำสั่ง

> titanix[36:52,] <- cbind(pclass,sex,age,survived)

ตรวจสอบข้อมูลในแถวที่ ๓๖ ถึงแถวที่ ๕๒ ใน matrix titanix

บรรทัดคำสั่ง

> titanix[36:52,]
      [,1]  [,2]     [,3]    [,4]
 [1,] "3rd" "female" "child" "No"
 [2,] "3rd" "female" "child" "No"
 [3,] "3rd" "female" "child" "No"
 [4,] "3rd" "female" "child" "No"
 [5,] "3rd" "female" "child" "No"
 [6,] "3rd" "female" "child" "No"
 [7,] "3rd" "female" "child" "No"
 [8,] "3rd" "female" "child" "No"
 [9,] "3rd" "female" "child" "No"
[10,] "3rd" "female" "child" "No"
[11,] "3rd" "female" "child" "No"
[12,] "3rd" "female" "child" "No"
[13,] "3rd" "female" "child" "No"
[14,] "3rd" "female" "child" "No"
[15,] "3rd" "female" "child" "No"
[16,] "3rd" "female" "child" "No"
[17,] "3rd" "female" "child" "No"

ข้อมูลที่เราต้องทำซ้ำอีกก็คือ

   Class    Sex   Age Survived Freq
9    1st   Male Adult       No  118
10   2nd   Male Adult       No  154
11   3rd   Male Adult       No  387
12  Crew   Male Adult       No  670
13   1st Female Adult       No    4
14   2nd Female Adult       No   13
15   3rd Female Adult       No   89
16  Crew Female Adult       No    3
17   1st   Male Child      Yes    5
18   2nd   Male Child      Yes   11
19   3rd   Male Child      Yes   13
21   1st Female Child      Yes    1
22   2nd Female Child      Yes   13
23   3rd Female Child      Yes   14
25   1st   Male Adult      Yes   57
26   2nd   Male Adult      Yes   14
27   3rd   Male Adult      Yes   75
28  Crew   Male Adult      Yes  192
29   1st Female Adult      Yes  140
30   2nd Female Adult      Yes   80
31   3rd Female Adult      Yes   76
32  Crew Female Adult      Yes   20

 

โดยทำวิธีเดียวกับบรรทัดคำสั่งข้างต้นจบครบทุกกลุ่มข้อมูล

 

ซึ่งจะเห้นว่า เราต้องใช้รรทัดคำสั่งหลายบรรทัดคำสั่งเพื่อสร้างข้อมูลให้ครบทุกกลุ่ม แต่บรรทัดคำสั่งที่ใช้ทั้งหมดนั้น จะมีรูปแบบเดียวกันตลอด สิ่งที่ต่างไปก็คือ ค่าของแต่ละตัวแปร และจำนวนซ้ำที่ต้องสร้างขึ้น ซึ่งจะขึ้นกับกลุ่มของข้อมูลแต่ละกลุ่ม และที่ต่างไปอีกอย่างก็คือตำแหน่งที่ใน matrix ของข้อมูลแต่ละชุด

 

หากเราต้องการที่จะลดจำนวนบรรทัดคำสั่งลง ก็ต้องใช้การเขียนลูป (loop) คำสั่งสำหรับทำงานนี้ให้เรา

 

อิอิอิ

 

เราเอง

 

เพลง: Red is the Rose
ศิลปิน: Emi Fujita

 

Red is the Rose ในฉบับของ Emi Fujita นักร้อง style Audiophile อีกคน ไม่ได้ฟังเสียงของเธอนานแล้ว สบโอกาสวันนี้ฟังกันดูครับ

 

Red is the rose that in yonder garden grows
Fair is the lily of the valley
Clear is the water that flows from the Boyne
But my love is fairer than any.

......

 

Sections: Miscellaneous
License: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
created: 30 April 2014 17:24 Modified: 01 May 2020 09:29 [ Report Abuse ]
ดอกไม้
People who like this: Ico24 ServiceMan, Ico24 คนธรรมดา, and 2 others.
People Who Like This
 
Facebook
Twitter
Google

Other Posts By This Blogger

ความเห็น

ไม่มีความเห็น
คุณต้องทำการเข้าระบบก่อนแสดงความเห็น