Perlu dibuat suatu objek connection sebagai variabel yang menghubungkan SQL dengan aplikasi R Untuk menggunakan SQL engine di R.
data1 <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Chinook.db")
Syntax menunjukkan pembuatan variabel data1 sebagai objek connection dengan engine SQL pada file tertentu yang merujuk ke device pengguna.
Pengguna dapat menggunakan syntax SQL di R seperti contoh berikut:
SELECT
*
FROM
Albums
WHERE
ArtistId=1;
| AlbumId | Title | ArtistId |
|---|---|---|
| 1 | For Those About To Rock We Salute You | 1 |
| 4 | Let There Be Rock | 1 |
Diperlukan variabel baru untuk memanggil suatu database.
data2 <- DBI::dbConnect(RSQLite::SQLite(), "C:/sqlite/Chinook.db")
dengan kelas:
class(data2)
## [1] "SQLiteConnection"
## attr(,"package")
## [1] "RSQLite"
Untuk melihat ada tabel apa saja pada chinook:
RSQLite::dbListTables(data2)
## [1] "albums" "artists" "customers" "employees"
## [5] "genres" "invoice_items" "invoices" "media_types"
## [9] "playlist_track" "playlists" "sqlite_sequence" "sqlite_stat1"
## [13] "tracks"
Panggil package yang akan digunakan terlebih dahulu, yaitu package dplry dan dbplyr atau hanya memanggil package tidyverse yang mencakup keduanya sekaligus.
library(dplyr)
library(dbplyr)
Dengan menggunakan fungsi dplyr, kita dapat memanggil tabel spesifik dari database chinook2 sebagai variabel baru di R:
albums <- dplyr::tbl(data2, "Albums")
albums
## # Source: table<Albums> [?? x 3]
## # Database: sqlite 3.36.0 [C:\sqlite\chinook.db]
## AlbumId Title ArtistId
## <int> <chr> <int>
## 1 1 For Those About To Rock We Salute You 1
## 2 2 Balls to the Wall 2
## 3 3 Restless and Wild 2
## 4 4 Let There Be Rock 1
## 5 5 Big Ones 3
## 6 6 Jagged Little Pill 4
## 7 7 Facelift 5
## 8 8 Warner 25 Anos 6
## 9 9 Plays Metallica By Four Cellos 7
## 10 10 Audioslave 8
## # ... with more rows
Dalam syntax dplyr, fungsi dalam kurung dapat diubah menjadi “%>%” agar lebih mudah terbaca. Contoh penggunaannya :
data3 <- albums %>%
select(AlbumId, Title, ArtistId) %>%
filter(ArtistId==2) %>%
arrange(AlbumId)
data3
## # Source: lazy query [?? x 3]
## # Database: sqlite 3.36.0 [C:\sqlite\chinook.db]
## # Ordered by: AlbumId
## AlbumId Title ArtistId
## <int> <chr> <int>
## 1 2 Balls to the Wall 2
## 2 3 Restless and Wild 2
Syntax di atas memanggil tabel album dan mencetak nomor ID album, Judul, nomor ID artis dengan ID artis adalah 2 kemudian diurutkan berdasarkan nomor ID album.
Pengguna dapat menggunakan syntax berikut untuk melihat bagaimana jika fungsi tersebut dijalankan di SQL:
dplyr::show_query(data3)
## <SQL>
## SELECT *
## FROM (SELECT `AlbumId`, `Title`, `ArtistId`
## FROM `Albums`)
## WHERE (`ArtistId` = 2.0)
## ORDER BY `AlbumId`
Pada tahap ini kita akan menggunakan dataset warpbreaks yang telah tersedia pada default datasets di R.
library(datasets)
warpbreaks
Perintah select berfungsi untuk memilih kolom tertentu saja untuk dicetak.
warpbreaks %>% select(breaks, tension)
## breaks tension
## 1 26 L
## 2 30 L
## 3 54 L
## 4 25 L
## 5 70 L
## 6 52 L
## 7 51 L
## 8 26 L
## 9 67 L
## 10 18 M
## 11 21 M
## 12 29 M
## 13 17 M
## 14 12 M
## 15 18 M
## 16 35 M
## 17 30 M
## 18 36 M
## 19 36 H
## 20 21 H
## 21 24 H
## 22 18 H
## 23 10 H
## 24 43 H
## 25 28 H
## 26 15 H
## 27 26 H
## 28 27 L
## 29 14 L
## 30 29 L
## 31 19 L
## 32 29 L
## 33 31 L
## 34 41 L
## 35 20 L
## 36 44 L
## 37 42 M
## 38 26 M
## 39 19 M
## 40 16 M
## 41 39 M
## 42 28 M
## 43 21 M
## 44 39 M
## 45 29 M
## 46 20 H
## 47 21 H
## 48 24 H
## 49 17 H
## 50 13 H
## 51 15 H
## 52 15 H
## 53 16 H
## 54 28 H
Perintah arrange berfungsi untuk mengurutkan tabel berdasarkan kolom tertentu yang telah ditentukan. Default dari perintah ini adalah pengurutan dari yang terkecil. Kita bisa menggunakan fungsi desc untuk mengurutkannya dari yang terbesar.
warpbreaks %>% arrange(desc(breaks))
## breaks wool tension
## 1 70 A L
## 2 67 A L
## 3 54 A L
## 4 52 A L
## 5 51 A L
## 6 44 B L
## 7 43 A H
## 8 42 B M
## 9 41 B L
## 10 39 B M
## 11 39 B M
## 12 36 A M
## 13 36 A H
## 14 35 A M
## 15 31 B L
## 16 30 A L
## 17 30 A M
## 18 29 A M
## 19 29 B L
## 20 29 B L
## 21 29 B M
## 22 28 A H
## 23 28 B M
## 24 28 B H
## 25 27 B L
## 26 26 A L
## 27 26 A L
## 28 26 A H
## 29 26 B M
## 30 25 A L
## 31 24 A H
## 32 24 B H
## 33 21 A M
## 34 21 A H
## 35 21 B M
## 36 21 B H
## 37 20 B L
## 38 20 B H
## 39 19 B L
## 40 19 B M
## 41 18 A M
## 42 18 A M
## 43 18 A H
## 44 17 A M
## 45 17 B H
## 46 16 B M
## 47 16 B H
## 48 15 A H
## 49 15 B H
## 50 15 B H
## 51 14 B L
## 52 13 B H
## 53 12 A M
## 54 10 A H
Perintah filter berfungsi untuk menyeleksi atau memilih baris berdasarkan ketentuan tertentu.
warpbreaks %>% filter(wool=='A')
## breaks wool tension
## 1 26 A L
## 2 30 A L
## 3 54 A L
## 4 25 A L
## 5 70 A L
## 6 52 A L
## 7 51 A L
## 8 26 A L
## 9 67 A L
## 10 18 A M
## 11 21 A M
## 12 29 A M
## 13 17 A M
## 14 12 A M
## 15 18 A M
## 16 35 A M
## 17 30 A M
## 18 36 A M
## 19 36 A H
## 20 21 A H
## 21 24 A H
## 22 18 A H
## 23 10 A H
## 24 43 A H
## 25 28 A H
## 26 15 A H
## 27 26 A H
mutate adalah perintah yang dapat membuat kolom baru dari kolom yang sudah ada.
warpbreaks %>% mutate(number=breaks)
## breaks wool tension number
## 1 26 A L 26
## 2 30 A L 30
## 3 54 A L 54
## 4 25 A L 25
## 5 70 A L 70
## 6 52 A L 52
## 7 51 A L 51
## 8 26 A L 26
## 9 67 A L 67
## 10 18 A M 18
## 11 21 A M 21
## 12 29 A M 29
## 13 17 A M 17
## 14 12 A M 12
## 15 18 A M 18
## 16 35 A M 35
## 17 30 A M 30
## 18 36 A M 36
## 19 36 A H 36
## 20 21 A H 21
## 21 24 A H 24
## 22 18 A H 18
## 23 10 A H 10
## 24 43 A H 43
## 25 28 A H 28
## 26 15 A H 15
## 27 26 A H 26
## 28 27 B L 27
## 29 14 B L 14
## 30 29 B L 29
## 31 19 B L 19
## 32 29 B L 29
## 33 31 B L 31
## 34 41 B L 41
## 35 20 B L 20
## 36 44 B L 44
## 37 42 B M 42
## 38 26 B M 26
## 39 19 B M 19
## 40 16 B M 16
## 41 39 B M 39
## 42 28 B M 28
## 43 21 B M 21
## 44 39 B M 39
## 45 29 B M 29
## 46 20 B H 20
## 47 21 B H 21
## 48 24 B H 24
## 49 17 B H 17
## 50 13 B H 13
## 51 15 B H 15
## 52 15 B H 15
## 53 16 B H 16
## 54 28 B H 28
Perintah summarise berfungsi untuk meringkas atau mengagregasi baris data. Digunakan fungsi group_by agar informasi yang dicetak lebih mudah dianalisis.
warpbreaks %>% group_by(wool) %>%
summarise (avg_breaks=mean(breaks))
## # A tibble: 2 x 2
## wool avg_breaks
## <fct> <dbl>
## 1 A 31.0
## 2 B 25.3
Kita dapat melakukan perintah kelima perintah secara bersamaan untuk mempersingkat program.
warpbreaks %>% select(breaks, wool, tension) %>%
arrange(desc(breaks)) %>%
filter(wool=='A') %>%
mutate(number=breaks) %>%
summarise (avg_breaks=mean(breaks))
## avg_breaks
## 1 31.03704