ในบทความนี้ เราจะมาดูวิธีใช้ sqldf() ซึ่งเป็น function ที่ช่วยให้เราทำงานกับ data frame ในภาษา R ได้ด้วย SQL syntax และเหมาะกับคนที่คุ้นเคยกับการใช้ SQL ในการทำงานกัน
ถ้าพร้อมแล้ว ไปเริ่มกันเลย
- 🏁 Getting Started: Install & Load sqldf
- 🏃♂️➡️ Using sqldf
- 😺 GitHub
- 📃 References
- ✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา
🏁 Getting Started: Install & Load sqldf
ก่อนเริ่มใช้ sqldf() เราจะต้องติดตั้งและโหลด sqldf ซึ่งเป็น package ต้นทางของ sdldf() ด้วย install.packages() และ library() ตามลำดับ:
# Install sqldf
install.packages("sqldf")
# Load sqldf
library(sqldf)
Note:
- เราใช้
install.packages()เพื่อติดตั้งแค่ครั้งเดียว - เราใช้
library()เพื่อโหลดsqldfทุกครั้งที่เริ่ม session ใหม่
🏃♂️➡️ Using sqldf
sqldf() ต้องการ 1 argument คือ character ที่มี SQL query เช่น:
sqldf("SELECT * FROM df")
เราลองมาดูตัวอย่างการใช้ sqldf() กับ Cars93 dataset (จาก MASS package) ซึ่งมีข้อมูลรถ 93 คันที่ขายในปี ค.ศ. 1993:
# Install MASS
install.packages("MASS")
# Load MASS
library(MASS)
# Load the dataset
data(Cars93)
# View the dataset structure
str(Cars93)
ผลลัพธ์:
'data.frame': 93 obs. of 27 variables:
$ Manufacturer : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
$ Model : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
$ Type : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
$ Min.Price : num 12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
$ Price : num 15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
$ Max.Price : num 18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
$ MPG.city : int 25 18 20 19 22 22 19 16 19 16 ...
$ MPG.highway : int 31 25 26 26 30 31 28 25 27 25 ...
$ AirBags : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
$ DriveTrain : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
$ Cylinders : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
$ EngineSize : num 1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
$ Horsepower : int 140 200 172 172 208 110 170 180 170 200 ...
$ RPM : int 6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
$ Rev.per.mile : int 2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
$ Man.trans.avail : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
$ Fuel.tank.capacity: num 13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
$ Passengers : int 5 5 5 6 4 6 6 6 5 6 ...
$ Length : int 177 195 180 193 186 189 200 216 198 206 ...
$ Wheelbase : int 102 115 102 106 109 105 111 116 108 114 ...
$ Width : int 68 71 67 70 69 69 74 78 73 73 ...
$ Turn.circle : int 37 38 37 37 39 41 42 45 41 43 ...
$ Rear.seat.room : num 26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
$ Luggage.room : int 11 15 14 17 13 16 17 21 14 18 ...
$ Weight : int 2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
$ Origin : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
$ Make : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...
.
1️⃣ Example 1. SELECT
เลือกข้อมูลจาก columns Manufacturer, Model, Min.Price, และ Max.Price:
# Set query
select_query <- "
SELECT
Manufacturer,
Model,
`Min.Price`,
`Max.Price`
FROM
Cars93
"
# Select from df
select_result <- sqldf(select_query)
# View the result
select_result
Note: เราใช้ backticks (`) สำหรับชื่อ columns ที่ไม่ valid ใน SQL (เช่น column ที่มี . อย่าง Min.Price และ Max.Price)
ผลลัพธ์:
Manufacturer Model Min.Price Max.Price
1 Acura Integra 12.9 18.8
2 Acura Legend 29.2 38.7
3 Audi 90 25.9 32.3
4 Audi 100 30.8 44.6
5 BMW 535i 23.7 36.2
6 Buick Century 14.2 17.3
7 Buick LeSabre 19.9 21.7
8 Buick Roadmaster 22.6 24.9
9 Buick Riviera 26.3 26.3
10 Cadillac DeVille 33.0 36.3
11 Cadillac Seville 37.5 42.7
12 Chevrolet Cavalier 8.5 18.3
13 Chevrolet Corsica 11.4 11.4
14 Chevrolet Camaro 13.4 16.8
15 Chevrolet Lumina 13.4 18.4
16 Chevrolet Lumina_APV 14.7 18.0
17 Chevrolet Astro 14.7 18.6
18 Chevrolet Caprice 18.0 19.6
19 Chevrolet Corvette 34.6 41.5
20 Chrylser Concorde 18.4 18.4
21 Chrysler LeBaron 14.5 17.1
22 Chrysler Imperial 29.5 29.5
23 Dodge Colt 7.9 10.6
24 Dodge Shadow 8.4 14.2
25 Dodge Spirit 11.9 14.7
26 Dodge Caravan 13.6 24.4
27 Dodge Dynasty 14.8 16.4
28 Dodge Stealth 18.5 33.1
29 Eagle Summit 7.9 16.5
30 Eagle Vision 17.5 21.2
31 Ford Festiva 6.9 7.9
32 Ford Escort 8.4 11.9
33 Ford Tempo 10.4 12.2
34 Ford Mustang 10.8 21.0
35 Ford Probe 12.8 15.2
36 Ford Aerostar 14.5 25.3
37 Ford Taurus 15.6 24.8
38 Ford Crown_Victoria 20.1 21.7
39 Geo Metro 6.7 10.0
40 Geo Storm 11.5 13.5
41 Honda Prelude 17.0 22.7
42 Honda Civic 8.4 15.8
43 Honda Accord 13.8 21.2
44 Hyundai Excel 6.8 9.2
45 Hyundai Elantra 9.0 11.0
46 Hyundai Scoupe 9.1 11.0
47 Hyundai Sonata 12.4 15.3
48 Infiniti Q45 45.4 50.4
49 Lexus ES300 27.5 28.4
50 Lexus SC300 34.7 35.6
51 Lincoln Continental 33.3 35.3
52 Lincoln Town_Car 34.4 37.8
53 Mazda 323 7.4 9.1
54 Mazda Protege 10.9 12.3
55 Mazda 626 14.3 18.7
56 Mazda MPV 16.6 21.7
57 Mazda RX-7 32.5 32.5
58 Mercedes-Benz 190E 29.0 34.9
59 Mercedes-Benz 300E 43.8 80.0
60 Mercury Capri 13.3 15.0
61 Mercury Cougar 14.9 14.9
62 Mitsubishi Mirage 7.7 12.9
63 Mitsubishi Diamante 22.4 29.9
64 Nissan Sentra 8.7 14.9
65 Nissan Altima 13.0 18.3
66 Nissan Quest 16.7 21.5
67 Nissan Maxima 21.0 22.0
68 Oldsmobile Achieva 13.0 14.0
69 Oldsmobile Cutlass_Ciera 14.2 18.4
70 Oldsmobile Silhouette 19.5 19.5
71 Oldsmobile Eighty-Eight 19.5 21.9
72 Plymouth Laser 11.4 17.4
73 Pontiac LeMans 8.2 9.9
74 Pontiac Sunbird 9.4 12.8
75 Pontiac Firebird 14.0 21.4
76 Pontiac Grand_Prix 15.4 21.6
77 Pontiac Bonneville 19.4 29.4
78 Saab 900 20.3 37.1
79 Saturn SL 9.2 12.9
80 Subaru Justy 7.3 9.5
81 Subaru Loyale 10.5 11.3
82 Subaru Legacy 16.3 22.7
83 Suzuki Swift 7.3 10.0
84 Toyota Tercel 7.8 11.8
85 Toyota Celica 14.2 22.6
86 Toyota Camry 15.2 21.2
87 Toyota Previa 18.9 26.6
88 Volkswagen Fox 8.7 9.5
89 Volkswagen Eurovan 16.6 22.7
90 Volkswagen Passat 17.6 22.4
91 Volkswagen Corrado 22.9 23.7
92 Volvo 240 21.8 23.5
93 Volvo 850 24.8 28.5
.
2️⃣ Example 2. WHERE
คัดกรองข้อมูลรถที่ชื่อผู้ผลิตขึ้นต้นด้วย “M”:
# Set query
where_result <- "
SELECT
Manufacturer,
Model,
`Min.Price`,
`Max.Price`
FROM
Cars93
WHERE
Manufacturer LIKE 'M%'
"
# Filter df
where_result <- sqldf(where_result)
# View the result
where_result
ผลลัพธ์:
Manufacturer Model Min.Price Max.Price
1 Mazda 323 7.4 9.1
2 Mazda Protege 10.9 12.3
3 Mazda 626 14.3 18.7
4 Mazda MPV 16.6 21.7
5 Mazda RX-7 32.5 32.5
6 Mercedes-Benz 190E 29.0 34.9
7 Mercedes-Benz 300E 43.8 80.0
8 Mercury Capri 13.3 15.0
9 Mercury Cougar 14.9 14.9
10 Mitsubishi Mirage 7.7 12.9
11 Mitsubishi Diamante 22.4 29.9
.
3️⃣ Example 3. Aggregate
หารถ 10 อันดับแรกที่มีราคาสูงสุด:
# Set query
aggregate_query <- "
SELECT
Manufacturer,
AVG(Price) AS Avg_Price
FROM
Cars93
GROUP BY
Manufacturer
ORDER BY
Avg_Price DESC
LIMIT
10;
"
# Aggregate df
aggregate_result <- sqldf(aggregate_query)
# View the result
aggregate_result
ผลลัพธ์:
Manufacturer Avg_Price
1 Infiniti 47.9
2 Mercedes-Benz 46.9
3 Cadillac 37.4
4 Lincoln 35.2
5 Audi 33.4
6 Lexus 31.6
7 BMW 30.0
8 Saab 28.7
9 Acura 24.9
10 Volvo 24.7
😺 GitHub
ดูตัวอย่าง code ทั้งหมดได้ที่ GitHub
📃 References
✅ R Book for Psychologists: หนังสือภาษา R สำหรับนักจิตวิทยา
📕 ขอฝากหนังสือเล่มแรกในชีวิตด้วยนะครับ 😆
🙋 ใครที่กำลังเรียนจิตวิทยาหรือทำงานสายจิตวิทยา และเบื่อที่ต้องใช้ software ราคาแพงอย่าง SPSS และ Excel เพื่อทำข้อมูล
💪 ผมขอแนะนำ R Book for Psychologists หนังสือสอนใช้ภาษา R เพื่อการวิเคราะห์ข้อมูลทางจิตวิทยา ที่เขียนมาเพื่อนักจิตวิทยาที่ไม่เคยมีประสบการณ์เขียน code มาก่อน
ในหนังสือ เราจะปูพื้นฐานภาษา R และพาไปดูวิธีวิเคราะห์สถิติที่ใช้บ่อยกัน เช่น:
- Correlation
- t-tests
- ANOVA
- Reliability
- Factor analysis
🚀 เมื่ออ่านและทำตามตัวอย่างใน R Book for Psychologists ทุกคนจะไม่ต้องพึง SPSS และ Excel ในการทำงานอีกต่อไป และสามารถวิเคราะห์ข้อมูลด้วยตัวเองได้ด้วยความมั่นใจ
แล้วทุกคนจะแปลกใจว่า ทำไมภาษา R ง่ายขนาดนี้ 🙂↕️
👉 สนใจดูรายละเอียดหนังสือได้ที่ meb:

Leave a comment