ก่อนเริ่มต้น ให้ download เอกสารต่าง ๆ ผ่าน Link นี้ ด้านล่างนี้ http://shorturl.at/zIPSV
โดยใน module นี้จะไปทีละ step ดังนี้
1. ทำความเข้าใจเบื้องต้นเกี่ยวกับ R
ทำความรู้จักเครื่องหมายที่ใช้บ่อย ๆ ดังนี้
1.1 Assign (-> หรือ <- )
- R เป็นโปรแกรมที่ทำงานกับ object โดย object จะต้องมีชื่อ
- วิธีการใช้: เครื่องหมายลูกศร <- หรือ -> บอก R ว่า เราต้องการสร้าง object/vector ต่าง ๆ โดยอาจจะเป็นตัวเลขหรือเป็นตัวอักษรก็ได้
## [1] 5
## [1] "Hello"
ทิศทางไม่มีผลต่อการใช้ลูกศร
## [1] 10
1.2 ตัวอักษร c ตัวเล็ก
- หมายถึง การเชื่อมต่อหลาย ๆ object/vector เข้าไว้ด้วยกัน
- วิธีการเขียน: c(x, y, z) เชื่อมโดยใช้ comma (,) ขั้น
## [1] "5" "Hello" "10"
## [1] 1 2 3 4 5
1.3 เครื่องหมายต่าง ๆ ในการคิดเลข (calculator)
- หมายถึง เปรียบเสมือนเครื่องคิดเลข
- วิธีการใช้: สามารถใช้เครื่องหมายต่าง ๆ ได้ เช่น บวก (+), ลบ (-), คูณ (*), หาร (/), ยกกำลัง (^) โดยคั่นระหว่าง object/vector ต่าง ๆ
## [1] 2
## [1] 9
## [1] 15
## [1] 5
## [1] 8
## [1] 8
รวมถึงสามารถใช้เครื่องหมายกับ object/vector ได้
โดยคั่นระหว่าง object/vector ต่าง ๆ
## [1] 10
## [1] 50
1.4 ตรวจสอบชนิดของตัวแปร
- วิธีการใช้: ใช้ class(x) โดย x ให้ใส่ object/vector ที่เราต้องการทราบ รายละเอียดความแตกต่างและการใช้งานของแต่ละชนิดตัวแปรจะยังไม่กล่าว ณ ที่นี้
## [1] "numeric"
## [1] "character"
1.5 ลบ object/vector
- หมายถึง ลบ (delete) object/vector ออกจาก environment ของ R
- วิธีการใช้: rm() โดยใส่ object/vector ในวงเล็บ โดยสามารถใส่หลาย object/vector ได้ เชื่อมโดย comma (,) โดยให้สังเกตที่ช่องมุมขวาบนของโปรแกรม R จะเห็นว่า object เหล่านั้นหายไป
สามารถลบทุกอย่างใน environment ได้ โดย
Exercise 1
- สร้าง object ชื่อ OneTen เป็นตัวเลขเรียงจาก 1 ถึง 10 (ใช้ 1:10 ในการสร้างเลขเรียงต่อกันได้)
- ตรวจสอบชนิดของตัวแปร OneTen
- สร้าง object ชื่อ my_name ประกอบด้วย ชื่อ สกุล และชื่อเล่นของคุณ (เป็นภาษาอังกฤษ)
- ตรวจสอบชนิดของตัวแปร my_name
- ลบ object OneTen และ my_name ออกจาก Global enviroment
2. DATA TYPE
โดยทั่วไปสามารถแบ่ง data type ได้เป็น 4 รูปแบบ ได้แก่ numeric, character, factor และ logical มีรายละเอียด ดังนี้
2.1 Numeric
- หมายถึง ตัวเลขต่าง ๆ ดังนั้น สามารถใช้เครื่องหมายทางคณิตศาสตร์ได้
## [1] "numeric"
2.2 Character
- หมายถึง พวกตัวอักษร (text) ต่าง ๆ
## [1] "character"
## [1] "Control" "Intervention1" "Intervention2"
## [1] "character"
2.3 Factor
- หมายถึง ตัวแปรแบบกลุ่ม (categorical) ต่าง ๆ ที่เราพิจารณาให้ความสำคัญกับลำดับในการวิเคราห์ โดยลำดับในที่นี้หมายถึง ก่อน/หลัง ไม่ได้หมายถึง การมากกว่าหรือน้อยกว่า แบบ order
## [1] "factor"
ลองเปรียบเทียบหน้าตาของ z (character) และ z2 (factor)
## [1] "Control" "Intervention1" "Intervention2"
## [1] Control Intervention1 Intervention2
## Levels: Control Intervention1 Intervention2
2.4 Logical
- การใช้งาน โดยปกติแล้ว Logical vector/object จะมีค่า (value) แค่ 2 ค่าเท่านั้น ได้แก่ TRUE (ตัวย่อ คือ T) และ FALSE (ตัวย่อ คือ F) โดยจะมีประโยชน์ในการใช้คำสั่งตรวจสอบ หรือสร้างตัวแปรใหม่ ซึ่งจะมีตัวอย่างในลำดับถัด ๆ ไป
## [1] FALSE
## [1] TRUE
- Logical ของตัวแปร Character ก็ได้เช่นกัน
- หมายเหตุ: ใน R จะใช้เครื่องหมายเท่ากับ แบบนี้ “==” (คือ มีเท่ากับ 2 อันติดกัน) และ เครื่องหมายไม่เท่ากับ แบบนี้ “!=” โดยเครื่องหมายตกใจ (!) หมายถึง “ไม่” ใน R
## [1] "Disease" "Healthy" "Disease" "Healthy"
## [1] TRUE FALSE TRUE FALSE
## [1] FALSE TRUE FALSE TRUE
3. DATA STRUCTURE
หลัก ๆ ที่ต้องรู้จักและใช้งานบ่อย คือ ## 3.1 Vector ## 3.2 Dataframe ## 3.3 Matrix
ในที่นี้จะขอกล่าวถึงแค่ 2 structure แรก เนื่องจากใช้บ่อย โดยที่ผ่านมาเราคุ้นชินกับ vector แล้ว ในที่นี้จึงจะอธิบายรายละเอียดการใช้งานของ Dataframe ดังนี้
4. DATAFRAME
เป็นรูปแบบคล้ายกับ file excel ที่คนทั่วไปคุ้นเคยในการเก็บข้อมูล (data collection) เพียงแต่เมื่อนำเข้า (import) เข้ามาใน R เราจะเรียกมันว่า Dataframe
อย่างไรก็ตามเราสามารถที่จะสร้าง dataframe ขึ้นมาด้วยตนเองก็ได้เช่นกัน ดังนี้
id <- c(1, 2, 3, 4, 5)
before <- c(10, 9, 8, 10, 7)
after <- c(8, 6, 8, 9, 7)
data.frame(id, before, after)## id before after
## 1 1 10 8
## 2 2 9 6
## 3 3 8 8
## 4 4 10 9
## 5 5 7 7
สร้าง dataframe ชื่อว่า “df” โดยใช้เครื่องหมาย assign ดังนี้
## id before after
## 1 1 10 8
## 2 2 9 6
## 3 3 8 8
## 4 4 10 9
## 5 5 7 7
โดยทั่วไปแล้วเราจะใช้ R กับ dataframe เป็นหลัก ดังนั้น เราควรคุ้นเคยกับ data structure แบบ dataframe เช่นกัน
5. เริ่มต้นใช้งานจริง กับ dataframe ที่ import มาจากภายนอก
ชีวิตในการทำงานจริง ส่วนใหญ่แล้วเราเก็บข้อมูลด้วยโปรแกรมอื่น ๆ เช่น epidata, kobo, access, excel เป็นต้น รวมถึงอาจจะดึงข้อมูลจากฐานข้อมูลต่าง ๆ เช่น HIS (Hospital Information System) เป็นต้น
คำสั่งที่แนะนำให้ใช้เริ่มต้นเสมอ มีดังนี้
- ล้างทุกอย่างก่อนและตั้งพื้นที่ที่เราทำงาน (working directory)
- ติดตั้ง pacakge
- เนื่องจาก R เป็นโปรแกรมพื้นฐาน และเป็น command base ดังนั้น จึงมีผู้เขียน package เพื่อให้ผู้ใช้ใช้งานได้ง่ายมากขึ้น โดยก่อนใช้เราต้องทำการ install package และ เรียกใช้งาน
- ในที่นี้จะยกตัวอย่าง package epiDisplay
- นำข้อมูลเข้า R (import data)
- เป็นโปรแกรมที่จะทำงานกับ data frame ซักอันหนึ่ง ซึ่งเราจะมีวิธีการ import เข้า R โดยที่เบื้องต้น ควรจะรู้จักข้อมูลที่ได้มาจากหลายโปรแกรม ดังนี้ Text (.txt), comma separated values (.csv), Excel (.xls, .xlsx), SPSS (.sav), STATA (.dta) และ SAS (.xpt)
- โดย Command ที่เราใช้บ่อยได้แก่ read.csv() for CSV , read.spss() for SPSS, read.dta() for STATA
rm(list = ls()) # to remove everything
# install.packages("epiDisplay") # install package ในครั้งแรกเท่านั้น (ทำเพียงครั้งเดียว)
library(epiDisplay) # เรียกใช้## Loading required package: foreign
## Loading required package: survival
## Loading required package: MASS
## Loading required package: nnet
setwd("/Users/polathep/Google Drive/02 PSU/2020/75 Rookie teacher_2020-08-21/03 Data") # set our working directory - แต่ละคนจะไม่เหมือนกัน
#setwd("D:\\Google Drive\\02 PSU\\2020\\75 Rookie teacher_2020-08-21\\Data Analysis_shared folder\\01 Introduction to R") # set our working directory - แต่ละคนจะไม่เหมือนกัน
dir() # explore our working directory## [1] "birthweight_edited.csv" "birthweight_practice.csv"
## [3] "birthweight.csv"
## id age lwt race smoke ptl ht ui ftv bwt low
## 1 1 36 202 white no 0 0 0 1 2836 normal BW
## 2 2 25 120 other no 0 0 1 2 2877 normal BW
## 3 3 17 120 black no 0 0 0 2 2438 low BW
## 4 4 22 129 white no 0 0 0 0 4111 normal BW
## 5 5 25 105 other no 1 0 0 1 2240 low BW
## 6 6 20 105 white yes 0 0 0 1 2557 normal BW
Subset ของ dataframe โดยมี format ดังนี้ dataframe [row, column]
ตัวอย่าง ดังนี้
- ต้องการดูข้อมูลแถว (row) ที่ 1 [หรือ id1 นั่นเอง]
## id age lwt race smoke ptl ht ui ftv bwt low
## 1 1 36 202 white no 0 0 0 1 2836 normal BW
- ต้องการดู column ที่ 1
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
## [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
## [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
## [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
## [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
## [91] 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
## [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
## [127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
## [145] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
## [163] 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## [181] 181 182 183 184 185 186 187 188 189
- ต้องการดูข้อมูลทุก column ของ id ที่อายุน้อยกว่า 15 ปี
## id age lwt race smoke ptl ht ui ftv bwt low
## 30 30 14 101 other yes 1 0 0 0 2466 low BW
## 151 151 14 100 other no 0 0 0 2 2495 low BW
## 172 172 14 135 white no 0 0 0 0 3941 normal BW
Exercise 2
- ฐานข้อมูลดังกล่าวมีตัวแปรกี่ตัว ? และมีจำนวนตัวอย่างเท่าไร ?
- ฐานข้อมูล dat มีตัวแปร numeric หรือ integer กี่ตัวแปร อะไรบ้าง ?
- ฐานข้อมูล dat มีตัวแปร factor กี่ตัวแปร อะไรบ้าง ?
- อายุ (age) ของ id ที่ 10 เท่ากับเท่าไร ?
- น้ำหนักแรกคลอด (bwt) ของ id ที่ 180 เท่ากับเท่าไร ?
- สร้างตัวแปรใหม่ ชื่อ bwt.kg หมายถึง น้ำหนักแรกคลอดของเด็กในหน่วยกิโลกรัม
- มีตัวอย่างกี่คนที่่อายุมากกว่า 30 ปี และ น้ำหนักแรกคลอด (lwt) น้อยกว่า 2,500
- id ที่เท่าไรบ้าง ที่มีอายุมากกว่า 35 ปี