ก่อนเริ่มต้น ให้ download เอกสารต่าง ๆ ผ่าน Link นี้ ด้านล่างนี้ http://shorturl.at/zIPSV

โดยใน module นี้จะไปทีละ step ดังนี้


1. ทำความเข้าใจเบื้องต้นเกี่ยวกับ R

ทำความรู้จักเครื่องหมายที่ใช้บ่อย ๆ ดังนี้

1.1 Assign (-> หรือ <- )

  • R เป็นโปรแกรมที่ทำงานกับ object โดย object จะต้องมีชื่อ
  • วิธีการใช้: เครื่องหมายลูกศร <- หรือ -> บอก R ว่า เราต้องการสร้าง object/vector ต่าง ๆ โดยอาจจะเป็นตัวเลขหรือเป็นตัวอักษรก็ได้
# Assign 
x <- 5
x
## [1] 5
y <- "Hello"
y
## [1] "Hello"

ทิศทางไม่มีผลต่อการใช้ลูกศร

10 -> z
z
## [1] 10


1.2 ตัวอักษร c ตัวเล็ก

  • หมายถึง การเชื่อมต่อหลาย ๆ object/vector เข้าไว้ด้วยกัน
  • วิธีการเขียน: c(x, y, z) เชื่อมโดยใช้ comma (,) ขั้น
# To create object with more than one value
xyz <- c(x, y, z)
xyz
## [1] "5"     "Hello" "10"
score <- c(1, 2, 3, 4, 5)
score
## [1] 1 2 3 4 5


1.3 เครื่องหมายต่าง ๆ ในการคิดเลข (calculator)

  • หมายถึง เปรียบเสมือนเครื่องคิดเลข
  • วิธีการใช้: สามารถใช้เครื่องหมายต่าง ๆ ได้ เช่น บวก (+), ลบ (-), คูณ (*), หาร (/), ยกกำลัง (^) โดยคั่นระหว่าง object/vector ต่าง ๆ
1+1 
## [1] 2
10-1
## [1] 9
5*3
## [1] 15
10/2
## [1] 5
2^3 # 2*2*2 = 8
## [1] 8
2**3 # 2*2*2 = 8
## [1] 8

รวมถึงสามารถใช้เครื่องหมายกับ object/vector ได้

โดยคั่นระหว่าง object/vector ต่าง ๆ

2*x 
## [1] 10
x*z
## [1] 50


1.4 ตรวจสอบชนิดของตัวแปร

  • วิธีการใช้: ใช้ class(x) โดย x ให้ใส่ object/vector ที่เราต้องการทราบ รายละเอียดความแตกต่างและการใช้งานของแต่ละชนิดตัวแปรจะยังไม่กล่าว ณ ที่นี้
class(x)
## [1] "numeric"
class(y)
## [1] "character"

1.5 ลบ object/vector

  • หมายถึง ลบ (delete) object/vector ออกจาก environment ของ R
  • วิธีการใช้: rm() โดยใส่ object/vector ในวงเล็บ โดยสามารถใส่หลาย object/vector ได้ เชื่อมโดย comma (,) โดยให้สังเกตที่ช่องมุมขวาบนของโปรแกรม R จะเห็นว่า object เหล่านั้นหายไป
rm(x,y) # Remove object x and y

สามารถลบทุกอย่างใน environment ได้ โดย

rm(list = ls()) # Remove everything 


Exercise 1

  1. สร้าง object ชื่อ OneTen เป็นตัวเลขเรียงจาก 1 ถึง 10 (ใช้ 1:10 ในการสร้างเลขเรียงต่อกันได้)
  2. ตรวจสอบชนิดของตัวแปร OneTen
  3. สร้าง object ชื่อ my_name ประกอบด้วย ชื่อ สกุล และชื่อเล่นของคุณ (เป็นภาษาอังกฤษ)
  4. ตรวจสอบชนิดของตัวแปร my_name
  5. ลบ object OneTen และ my_name ออกจาก Global enviroment

2. DATA TYPE

โดยทั่วไปสามารถแบ่ง data type ได้เป็น 4 รูปแบบ ได้แก่ numeric, character, factor และ logical มีรายละเอียด ดังนี้

2.1 Numeric

  • หมายถึง ตัวเลขต่าง ๆ ดังนั้น สามารถใช้เครื่องหมายทางคณิตศาสตร์ได้
x <- 150
class(x)
## [1] "numeric"

2.2 Character

  • หมายถึง พวกตัวอักษร (text) ต่าง ๆ
y <- "Human"
class(y)
## [1] "character"
z <- c("Control", "Intervention1", "Intervention2")
z
## [1] "Control"       "Intervention1" "Intervention2"
class(z)
## [1] "character"

2.3 Factor

  • หมายถึง ตัวแปรแบบกลุ่ม (categorical) ต่าง ๆ ที่เราพิจารณาให้ความสำคัญกับลำดับในการวิเคราห์ โดยลำดับในที่นี้หมายถึง ก่อน/หลัง ไม่ได้หมายถึง การมากกว่าหรือน้อยกว่า แบบ order
z2 <- factor(z)
class(z2)
## [1] "factor"

ลองเปรียบเทียบหน้าตาของ z (character) และ z2 (factor)

z
## [1] "Control"       "Intervention1" "Intervention2"
z2
## [1] Control       Intervention1 Intervention2
## Levels: Control Intervention1 Intervention2


2.4 Logical

  • การใช้งาน โดยปกติแล้ว Logical vector/object จะมีค่า (value) แค่ 2 ค่าเท่านั้น ได้แก่ TRUE (ตัวย่อ คือ T) และ FALSE (ตัวย่อ คือ F) โดยจะมีประโยชน์ในการใช้คำสั่งตรวจสอบ หรือสร้างตัวแปรใหม่ ซึ่งจะมีตัวอย่างในลำดับถัด ๆ ไป
1 > 2
## [1] FALSE
10 < 20
## [1] TRUE
  • Logical ของตัวแปร Character ก็ได้เช่นกัน
  • หมายเหตุ: ใน R จะใช้เครื่องหมายเท่ากับ แบบนี้ “==” (คือ มีเท่ากับ 2 อันติดกัน) และ เครื่องหมายไม่เท่ากับ แบบนี้ “!=” โดยเครื่องหมายตกใจ (!) หมายถึง “ไม่” ใน R
status <- c("Disease", "Healthy", "Disease", "Healthy"); status
## [1] "Disease" "Healthy" "Disease" "Healthy"
status == "Disease"
## [1]  TRUE FALSE  TRUE FALSE
status != "Disease"
## [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 ดังนี้

df <- data.frame(id, before, after)
df
##   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) เป็นต้น

คำสั่งที่แนะนำให้ใช้เริ่มต้นเสมอ มีดังนี้

  1. ล้างทุกอย่างก่อนและตั้งพื้นที่ที่เราทำงาน (working directory)
  2. ติดตั้ง pacakge
  1. นำข้อมูลเข้า R (import data)
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"
dat <- read.csv("birthweight.csv", header = T)
head(dat) # head(…) ใช้สำหรับการอ่านแถวข้อมูลช่วงบน
##   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]

ตัวอย่าง ดังนี้

  1. ต้องการดูข้อมูลแถว (row) ที่ 1 [หรือ id1 นั่นเอง]
dat[1,] # 1st row
##   id age lwt  race smoke ptl ht ui ftv  bwt       low
## 1  1  36 202 white    no   0  0  0   1 2836 normal BW
  1. ต้องการดู column ที่ 1
dat[,1] # 1st row
##   [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
  1. ต้องการดูข้อมูลทุก column ของ id ที่อายุน้อยกว่า 15 ปี
dat[dat$age<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

  1. ฐานข้อมูลดังกล่าวมีตัวแปรกี่ตัว ? และมีจำนวนตัวอย่างเท่าไร ?
  2. ฐานข้อมูล dat มีตัวแปร numeric หรือ integer กี่ตัวแปร อะไรบ้าง ?
  3. ฐานข้อมูล dat มีตัวแปร factor กี่ตัวแปร อะไรบ้าง ?
  4. อายุ (age) ของ id ที่ 10 เท่ากับเท่าไร ?
  5. น้ำหนักแรกคลอด (bwt) ของ id ที่ 180 เท่ากับเท่าไร ?
  6. สร้างตัวแปรใหม่ ชื่อ bwt.kg หมายถึง น้ำหนักแรกคลอดของเด็กในหน่วยกิโลกรัม
  7. มีตัวอย่างกี่คนที่่อายุมากกว่า 30 ปี และ น้ำหนักแรกคลอด (lwt) น้อยกว่า 2,500
  8. id ที่เท่าไรบ้าง ที่มีอายุมากกว่า 35 ปี