What is it?
Data wrangling คือทักษะการปรับเปลี่ยนหน้าตาข้อมูลให้อยู่ในรูปแบบที่เหมาะสมกับการทำ data analysis หรือ data visualization อื่นๆต่อไป บทความวันนี้เราจะแนะนำการใช้ฟังชั่นใน package dplyr ซึ่งเป็นฟังชั่นแรกๆที่เราแนะนำให้คนที่เพิ่งเริ่มเขียน R ทำให้เป็นก่อนเลย
ติดตั้งและเรียกใช้งานฟังชั่นใน package dplyr ด้วยโค้ดนี้
# install package | |
install.packages("dplyr") | |
library(dplyr) |
Foundation
dplyr มี functions หลักที่ใช้ในการทำ data wranling อยู่ 6 functions เริ่มจากพื้นฐานก่อน
- select ใช้เลือกคอลั่มที่เราต้องการ
- filter ใช้ฟิลเตอร์แถวที่เราต้องการด้วยเงื่อนไขต่างๆ
- arrange ใช้เรียงข้อมูล i.e. sort rows
เราใช้ pipe operator (%>%) เพื่อเขียนเชื่อมโค้ดเข้าด้วยกันแบบนี้ ลอง copy โค้ดไปลองเล่นใน RStudio ทิป – ฟังชั่น filter()
สามารถใส่ได้มากกว่าหนึ่งเงื่อนไข โดยใช้ &
หรือ |
มาช่วย
# basic data wrangling | |
# 1. select columns | |
mtcars %>% select(mpg, hp, wt) | |
mtcars %>% select(1:4, 5) | |
# 2. filter rows | |
mtcars %>% filter(hp <= 100) | |
mtcars %>% filter(hp <= 100 & am == 1) | |
mtcars %>% filter(hp <= 90 | am == 0) | |
# 3. arrange rows | |
mtcars %>% arrange(mpg) | |
mtcars %>% arrange(desc(mpg)) |
อีกสามฟังชั่นใน dplyr ที่ควรใช้ให้เป็นคือ
- mutate ใช้สร้างคอลั่มใหม่
- summarise ใช้สรุปผลสถิติของคอลั่มที่เราเลือก
- group_by ใช้คู่กับ summarise เพื่อสรุปผลสถิติตามกลุ่ม
# 4. create new columns | |
mtcars %>% mutate(hp_2 = hp * 2) | |
mtcars %>% mutate(log_hp = log(hp)) | |
# 5. summarise statistics | |
mtcars %>% | |
summarise(mean_hp = mean(hp), | |
sd_hp = sd(hp), | |
n = n()) | |
# 6. group_by() always used with summarise() | |
mtcars %>% | |
group_by(am) %>% | |
summarise(mean_hp = mean(hp)) |
โค้ด line 12-14 เราสั่งให้ R จับกลุ่ม mtcars ด้วยคอลั่ม am group_by(am)
แล้วค่อยหาค่าเฉลี่ย mean(hp)
ตามกลุ่ม (auto vs. manual)
Join
dplyr มี functions ที่ใช้ในการ join tables อยู่สามแบบหลักๆคือ left_join, inner_join และ full_join โดย concept จะเหมือนกับการเขียน SQL เลย เขียนเป็น venn diagram ได้แบบนี้

อ่านบทความเก่าของเรา – หัดเขียน SQL เป็นใน 10 นาที
มาลองดูโค้ดตัวอย่างใน R เราสร้าง data frame ง่ายๆขึ้นมาสองอัน df1 มีคอลั่ม {id, names} และ df2 มีคอลั่ม {id, grades} เราสามารถเขียนโค้ดเพื่อ join สอง df นี้ด้วยคอลั่ม id
# create example dataframe | |
df1 <- data.frame(id = 1:5, names = c("John", "Andy", "Otis", "Maive", "Jackson")) | |
df2 <- data.frame(id = c(1:4,6), grades = c("A", "B", "A", "F", "D")) | |
# join tables | |
inner_join(df1, df2, by = "id") | |
left_join(df1, df2, by = "id") | |
full_join(df1, df2, by = "id") | |
# assign to a new dataframe | |
new_df <- full_join(df1, df2, by = "id") | |
glimpse(new_df) |
syntax การเขียน join ใน R คือ *_join(table1, table2, by = "column")
หน้าตาของ dataframe ที่ได้จากการ join แต่ละแบบเหมือนในรูปด้านล่าง โดย <NA>
ในภาษา R คือค่า missing value (i.e. ไม่สามารถ map ค่าได้จากการ join df1 df2 เข้าด้วยกัน)
# inner_join(df1, df2, by = "id")
id names grades
1 John A
2 Andy B
3 Otis A
4 Maive F
# left_join(df1, df2, by = "id")
id names grades
1 John A
2 Andy B
3 Otis A
4 Maive F
5 Jackson <NA>
# full_join(df1, df2, by = "id")
id names grades
1 John A
2 Andy B
3 Otis A
4 Maive F
5 Jackson <NA>
6 <NA> D
เพื่อนๆสามารถอ่านการใช้งานเพิ่มเติมและดาวน์โหลด cheat sheet ของ dplyr ได้ที่นี่
functions ที่เราแนะนำในบทความวันนี้เป็นตัวหลักที่ใช้กันเยอะมาก ฝึกใช้ให้คล่อง แล้วการทำ data wrangling กับ data frame จะไม่ใช่เรื่องยากเลย Happy wrangling!