Pada proses analisis data, kita jarang melibatkan hanya satu tabel data. Biasanya kita memiliki banyak tabel data untuk diproses sesuai dengan tujuan kita, dimana harus menggabungkan dua atau lebih tabel data. Secara umum, beberapa tabel data yang tergabung pada satu kesatuan disebut sebagai data relasional.
Relasi selalu ditentukan antara sepasang tabel data, dimana setiap relasi dibangun dari properti relasi antara setiap pasangan tabel data. Tempat paling umum untuk menemukan data relasional adalah di sistem manajemen database relasional (atau RDBMS). Untuk membuat sistem database yang terintegrasi, maka antara satu tabel dengan tabel lain mempunyai hubungan yang harus selalu diperlihara. Setiap tabel mempunyai sebuah primary key. Primary key ini kemudian dihubungkan dengan tabel kedua dan menjadi foreign key untuk tabel kedua ini.
SQL merupakan salah satu sistem manajemen database yang biasa digunakan untuk mengelola data relasional. Akan tetapi, bahasa pemrograman SQL masih belum cukup jika kita ingin melakukan visualisasi data relasional. Untuk itu, diperlukan kombinasi bahasa pemrograman lain yang dapat memudahkan kita melakukan visualisasi database secara lebih mendalam, yaitu diantaranya yang populer saat ini adalah bahasa pemorgaraman R.
Beberapa package yang digunakan untuk bekerja dengan database menggunakan R software adalah:
dplyr dan dbplyr memiliki SQL back-end
yang digeneralisasi untuk bisa bekerja dengan database.odbc menyediakan antarmuka yang sesuai dengan DBI untuk
driver Open Database Connectivity (ODBC).Pada kesempatan ini, saya akan mengakses database
chinook. Untuk dapat melakukannya, perlu dipastikan
package DBI dan RSQLite telah terinstall.
Karena DBI dan RSQLite telah terinstall
sebelumnya, maka langkah selanjutnya adalah memanggil package
tidyverse yang mencakup beberapa package yang dibutuhkan
salah satunya dplyr serta memanggil package
RSQLite dan DBIuntuk mengakses dan mengolah
database terkait.
library("tidyverse")## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.4 v dplyr 1.0.7
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 2.0.1 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library("DBI")
library("RSQLite")Secara umum, koneksi terhadap database pada R dapat menggunakan
sintaks berikut:
DBI::dbConnect(RSQLite::SQLite(), path = ":dbname:")
chinook<-DBI::dbConnect(RSQLite::SQLite(),"C:/sqlite/db/chinook.db")Pada bagian ini dirinci isi tabel yang terdapat dalam database chinook, yang ternyata berjumlah 13 tabel.
RSQLite::dbListTables(chinook)## [1] "albums" "artists" "customers" "employees"
## [5] "genres" "invoice_items" "invoices" "media_types"
## [9] "playlist_track" "playlists" "sqlite_sequence" "sqlite_stat1"
## [13] "tracks"
Setelah mengetahui jumlah tabel yang terdapat dalam database chinook, langkah selanjutnya adalah merinci isi kolom yang ada pada masing-masing tabel agar memudahkan dalam proses analisis lebih lanjut.
colnames(albums)## [1] "AlbumId" "Title" "ArtistId"
colnames(artists)## [1] "ArtistId" "Name"
colnames(customers)## [1] "CustomerId" "FirstName" "LastName" "Company" "Address"
## [6] "City" "State" "Country" "PostalCode" "Phone"
## [11] "Fax" "Email" "SupportRepId"
colnames(employees)## [1] "EmployeeId" "LastName" "FirstName" "Title" "ReportsTo"
## [6] "BirthDate" "HireDate" "Address" "City" "State"
## [11] "Country" "PostalCode" "Phone" "Fax" "Email"
colnames(genres)## [1] "GenreId" "Name"
colnames(invoice_items)## [1] "InvoiceLineId" "InvoiceId" "TrackId" "UnitPrice"
## [5] "Quantity"
colnames(invoices)## [1] "InvoiceId" "CustomerId" "InvoiceDate"
## [4] "BillingAddress" "BillingCity" "BillingState"
## [7] "BillingCountry" "BillingPostalCode" "Total"
colnames(media_types)## [1] "MediaTypeId" "Name"
colnames(playlist_track)## [1] "PlaylistId" "TrackId"
colnames(playlists)## [1] "PlaylistId" "Name"
colnames(sqlite_sequence)## [1] "name" "seq"
colnames(sqlite_stat1)## [1] "tbl" "idx" "stat"
colnames(tracks)## [1] "TrackId" "Name" "AlbumId" "MediaTypeId" "GenreId"
## [6] "Composer" "Milliseconds" "Bytes" "UnitPrice"
Pada bagian ini akan dibahas penggunaan beberapa tabel. Sebagimana telah disebutkan dibagian sebelumnya, terdapat 13 tabel yang dapat digunakan. Ada beberapa cara yang bisa dilakukan untuk menggabungkan sejumlah tabel dalam database, yaitu dengan melakukan merge/join tabel, seperti fungsi berikut ini:
inner_join()Fungsi inner_join() menghasilkan semua baris pada table
x yang memiliki kesamaan nilai dengan table y,
dan semua kolom dari x dan y. Ilustrasi dapat
dilihat pada gambar berikut:
Berikut ditampilkan hasil penggabungan data secara inner_join pada
Tabel “employees” dan Tabel
“customers”, dengan identitas kolom yang dianggap sama
(primary key), yaitu
EmployeeId = CustomerId.
employees <- tbl(chinook,"employees")
head(employees)| EmployeeId | LastName | FirstName | Title | ReportsTo | BirthDate | HireDate | Address | City | State | Country | PostalCode | Phone | Fax | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Adams | Andrew | General Manager | NA | 1962-02-18 00:00:00 | 2002-08-14 00:00:00 | 11120 Jasper Ave NW | Edmonton | AB | Canada | T5K 2N1 | +1 (780) 428-9482 | +1 (780) 428-3457 | andrew@chinookcorp.com |
| 2 | Edwards | Nancy | Sales Manager | 1 | 1958-12-08 00:00:00 | 2002-05-01 00:00:00 | 825 8 Ave SW | Calgary | AB | Canada | T2P 2T3 | +1 (403) 262-3443 | +1 (403) 262-3322 | nancy@chinookcorp.com |
| 3 | Peacock | Jane | Sales Support Agent | 2 | 1973-08-29 00:00:00 | 2002-04-01 00:00:00 | 1111 6 Ave SW | Calgary | AB | Canada | T2P 5M5 | +1 (403) 262-3443 | +1 (403) 262-6712 | jane@chinookcorp.com |
| 4 | Park | Margaret | Sales Support Agent | 2 | 1947-09-19 00:00:00 | 2003-05-03 00:00:00 | 683 10 Street SW | Calgary | AB | Canada | T2P 5G3 | +1 (403) 263-4423 | +1 (403) 263-4289 | margaret@chinookcorp.com |
| 5 | Johnson | Steve | Sales Support Agent | 2 | 1965-03-03 00:00:00 | 2003-10-17 00:00:00 | 7727B 41 Ave | Calgary | AB | Canada | T3B 1Y7 | 1 (780) 836-9987 | 1 (780) 836-9543 | steve@chinookcorp.com |
| 6 | Mitchell | Michael | IT Manager | 1 | 1973-07-01 00:00:00 | 2003-10-17 00:00:00 | 5827 Bowness Road NW | Calgary | AB | Canada | T3B 0C5 | +1 (403) 246-9887 | +1 (403) 246-9899 | michael@chinookcorp.com |
customers <- tbl(chinook,"customers")
head(customers)| CustomerId | FirstName | LastName | Company | Address | City | State | Country | PostalCode | Phone | Fax | SupportRepId | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Luís | Gonçalves | Embraer - Empresa Brasileira de Aeronáutica S.A. | Av. Brigadeiro Faria Lima, 2170 | São José dos Campos | SP | Brazil | 12227-000 | +55 (12) 3923-5555 | +55 (12) 3923-5566 | luisg@embraer.com.br | 3 |
| 2 | Leonie | Köhler | NA | Theodor-Heuss-Straße 34 | Stuttgart | NA | Germany | 70174 | +49 0711 2842222 | NA | leonekohler@surfeu.de | 5 |
| 3 | François | Tremblay | NA | 1498 rue Bélanger | Montréal | QC | Canada | H2G 1A7 | +1 (514) 721-4711 | NA | ftremblay@gmail.com | 3 |
| 4 | Bjørn | Hansen | NA | Ullevålsveien 14 | Oslo | NA | Norway | 0171 | +47 22 44 22 22 | NA | bjorn.hansen@yahoo.no | 4 |
| 5 | František | Wichterlová | JetBrains s.r.o. | Klanova 9/506 | Prague | NA | Czech Republic | 14700 | +420 2 4172 5555 | +420 2 4172 5555 | frantisekw@jetbrains.com | 4 |
| 6 | Helena | Holý | NA | Rilská 3174/6 | Prague | NA | Czech Republic | 14300 | +420 2 4177 0449 | NA | hholy@gmail.com | 5 |
inner_join <- employees %>% inner_join(customers, by=c("EmployeeId"= "CustomerId"))
head(inner_join)| EmployeeId | LastName.x | FirstName.x | Title | ReportsTo | BirthDate | HireDate | Address.x | City.x | State.x | Country.x | PostalCode.x | Phone.x | Fax.x | Email.x | FirstName.y | LastName.y | Company | Address.y | City.y | State.y | Country.y | PostalCode.y | Phone.y | Fax.y | Email.y | SupportRepId |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Adams | Andrew | General Manager | NA | 1962-02-18 00:00:00 | 2002-08-14 00:00:00 | 11120 Jasper Ave NW | Edmonton | AB | Canada | T5K 2N1 | +1 (780) 428-9482 | +1 (780) 428-3457 | andrew@chinookcorp.com | Luís | Gonçalves | Embraer - Empresa Brasileira de Aeronáutica S.A. | Av. Brigadeiro Faria Lima, 2170 | São José dos Campos | SP | Brazil | 12227-000 | +55 (12) 3923-5555 | +55 (12) 3923-5566 | luisg@embraer.com.br | 3 |
| 2 | Edwards | Nancy | Sales Manager | 1 | 1958-12-08 00:00:00 | 2002-05-01 00:00:00 | 825 8 Ave SW | Calgary | AB | Canada | T2P 2T3 | +1 (403) 262-3443 | +1 (403) 262-3322 | nancy@chinookcorp.com | Leonie | Köhler | NA | Theodor-Heuss-Straße 34 | Stuttgart | NA | Germany | 70174 | +49 0711 2842222 | NA | leonekohler@surfeu.de | 5 |
| 3 | Peacock | Jane | Sales Support Agent | 2 | 1973-08-29 00:00:00 | 2002-04-01 00:00:00 | 1111 6 Ave SW | Calgary | AB | Canada | T2P 5M5 | +1 (403) 262-3443 | +1 (403) 262-6712 | jane@chinookcorp.com | François | Tremblay | NA | 1498 rue Bélanger | Montréal | QC | Canada | H2G 1A7 | +1 (514) 721-4711 | NA | ftremblay@gmail.com | 3 |
| 4 | Park | Margaret | Sales Support Agent | 2 | 1947-09-19 00:00:00 | 2003-05-03 00:00:00 | 683 10 Street SW | Calgary | AB | Canada | T2P 5G3 | +1 (403) 263-4423 | +1 (403) 263-4289 | margaret@chinookcorp.com | Bjørn | Hansen | NA | Ullevålsveien 14 | Oslo | NA | Norway | 0171 | +47 22 44 22 22 | NA | bjorn.hansen@yahoo.no | 4 |
| 5 | Johnson | Steve | Sales Support Agent | 2 | 1965-03-03 00:00:00 | 2003-10-17 00:00:00 | 7727B 41 Ave | Calgary | AB | Canada | T3B 1Y7 | 1 (780) 836-9987 | 1 (780) 836-9543 | steve@chinookcorp.com | František | Wichterlová | JetBrains s.r.o. | Klanova 9/506 | Prague | NA | Czech Republic | 14700 | +420 2 4172 5555 | +420 2 4172 5555 | frantisekw@jetbrains.com | 4 |
| 6 | Mitchell | Michael | IT Manager | 1 | 1973-07-01 00:00:00 | 2003-10-17 00:00:00 | 5827 Bowness Road NW | Calgary | AB | Canada | T3B 0C5 | +1 (403) 246-9887 | +1 (403) 246-9899 | michael@chinookcorp.com | Helena | Holý | NA | Rilská 3174/6 | Prague | NA | Czech Republic | 14300 | +420 2 4177 0449 | NA | hholy@gmail.com | 5 |
Untuk memperlihatkan bahwa fungsi inner_join() mengacu
pada irisan baris untuk kedua tabel yang bersesuaian primary
key, perhatikan banyaknya baris pada masing-masing tabel
sebagai berikut.
tally(employees)| n |
|---|
| 8 |
tally(customers)| n |
|---|
| 59 |
tally(inner_join)| n |
|---|
| 8 |
Perhatikan bahwa banyaknya baris pada hasil penggabungan tabel secara
inner_join adalah sama dengan tabel dengan jumlah baris paling
sedikit, yaitu employees.
left_join()Fungsi left_join() menghasilkan semua baris pada table
x, dan semua kolom pada x dan y,
dimana untuk baris pada x yang tidak memiliki kesamaan
dengan y diisi dengan nilai NA pada kolom yang
baru.
Sama halnya dengan tabel yang digunakan sebelumnya, berikut
ditampilkan hasil penggabungan secara left_join data pada Tabel
“employees” dan Tabel “customers”,
dengan identitas kolom yang dianggap sama (primary
key), yaitu EmployeeId = CustomerId.
left_join <- employees %>% left_join(customers, by=c("EmployeeId"="CustomerId"))
head(left_join)| EmployeeId | LastName.x | FirstName.x | Title | ReportsTo | BirthDate | HireDate | Address.x | City.x | State.x | Country.x | PostalCode.x | Phone.x | Fax.x | Email.x | FirstName.y | LastName.y | Company | Address.y | City.y | State.y | Country.y | PostalCode.y | Phone.y | Fax.y | Email.y | SupportRepId |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Adams | Andrew | General Manager | NA | 1962-02-18 00:00:00 | 2002-08-14 00:00:00 | 11120 Jasper Ave NW | Edmonton | AB | Canada | T5K 2N1 | +1 (780) 428-9482 | +1 (780) 428-3457 | andrew@chinookcorp.com | Luís | Gonçalves | Embraer - Empresa Brasileira de Aeronáutica S.A. | Av. Brigadeiro Faria Lima, 2170 | São José dos Campos | SP | Brazil | 12227-000 | +55 (12) 3923-5555 | +55 (12) 3923-5566 | luisg@embraer.com.br | 3 |
| 2 | Edwards | Nancy | Sales Manager | 1 | 1958-12-08 00:00:00 | 2002-05-01 00:00:00 | 825 8 Ave SW | Calgary | AB | Canada | T2P 2T3 | +1 (403) 262-3443 | +1 (403) 262-3322 | nancy@chinookcorp.com | Leonie | Köhler | NA | Theodor-Heuss-Straße 34 | Stuttgart | NA | Germany | 70174 | +49 0711 2842222 | NA | leonekohler@surfeu.de | 5 |
| 3 | Peacock | Jane | Sales Support Agent | 2 | 1973-08-29 00:00:00 | 2002-04-01 00:00:00 | 1111 6 Ave SW | Calgary | AB | Canada | T2P 5M5 | +1 (403) 262-3443 | +1 (403) 262-6712 | jane@chinookcorp.com | François | Tremblay | NA | 1498 rue Bélanger | Montréal | QC | Canada | H2G 1A7 | +1 (514) 721-4711 | NA | ftremblay@gmail.com | 3 |
| 4 | Park | Margaret | Sales Support Agent | 2 | 1947-09-19 00:00:00 | 2003-05-03 00:00:00 | 683 10 Street SW | Calgary | AB | Canada | T2P 5G3 | +1 (403) 263-4423 | +1 (403) 263-4289 | margaret@chinookcorp.com | Bjørn | Hansen | NA | Ullevålsveien 14 | Oslo | NA | Norway | 0171 | +47 22 44 22 22 | NA | bjorn.hansen@yahoo.no | 4 |
| 5 | Johnson | Steve | Sales Support Agent | 2 | 1965-03-03 00:00:00 | 2003-10-17 00:00:00 | 7727B 41 Ave | Calgary | AB | Canada | T3B 1Y7 | 1 (780) 836-9987 | 1 (780) 836-9543 | steve@chinookcorp.com | František | Wichterlová | JetBrains s.r.o. | Klanova 9/506 | Prague | NA | Czech Republic | 14700 | +420 2 4172 5555 | +420 2 4172 5555 | frantisekw@jetbrains.com | 4 |
| 6 | Mitchell | Michael | IT Manager | 1 | 1973-07-01 00:00:00 | 2003-10-17 00:00:00 | 5827 Bowness Road NW | Calgary | AB | Canada | T3B 0C5 | +1 (403) 246-9887 | +1 (403) 246-9899 | michael@chinookcorp.com | Helena | Holý | NA | Rilská 3174/6 | Prague | NA | Czech Republic | 14300 | +420 2 4177 0449 | NA | hholy@gmail.com | 5 |
Untuk memperlihatkan bahwa fungsi left_join() mengacu
pada tabel pertama, dalam hal ini adalah tabel employees,
perhatikan banyaknya baris pada tabel hasil left_join berikut.
tally(left_join)| n |
|---|
| 8 |
Perhatikan bahwa banyaknya baris pada hasil penggabungan tabel secara
left_join adalah sama dengan tabel acuannya, yaitu
employees.
right_join()Fungsi right_join() menghasilkan semua baris pada table
y, dan semua kolom pada x dan y,
dimana untuk baris pada y yang tidak memiliki kesamaan
dengan x akan diisi dengan nilai NA pada kolom
yang baru.
Berikut ditampilkan hasil penggabungan secara right_join data pada
Tabel “employees” dan Tabel
“customers”, dengan identitas kolom yang dianggap sama
(primary key), yaitu
EmployeeId = CustomerId.
right_join <- employees %>% right_join(customers, by=c("EmployeeId"="CustomerId"))
head(right_join)| EmployeeId | LastName.x | FirstName.x | Title | ReportsTo | BirthDate | HireDate | Address.x | City.x | State.x | Country.x | PostalCode.x | Phone.x | Fax.x | Email.x | FirstName.y | LastName.y | Company | Address.y | City.y | State.y | Country.y | PostalCode.y | Phone.y | Fax.y | Email.y | SupportRepId |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Adams | Andrew | General Manager | NA | 1962-02-18 00:00:00 | 2002-08-14 00:00:00 | 11120 Jasper Ave NW | Edmonton | AB | Canada | T5K 2N1 | +1 (780) 428-9482 | +1 (780) 428-3457 | andrew@chinookcorp.com | Luís | Gonçalves | Embraer - Empresa Brasileira de Aeronáutica S.A. | Av. Brigadeiro Faria Lima, 2170 | São José dos Campos | SP | Brazil | 12227-000 | +55 (12) 3923-5555 | +55 (12) 3923-5566 | luisg@embraer.com.br | 3 |
| 2 | Edwards | Nancy | Sales Manager | 1 | 1958-12-08 00:00:00 | 2002-05-01 00:00:00 | 825 8 Ave SW | Calgary | AB | Canada | T2P 2T3 | +1 (403) 262-3443 | +1 (403) 262-3322 | nancy@chinookcorp.com | Leonie | Köhler | NA | Theodor-Heuss-Straße 34 | Stuttgart | NA | Germany | 70174 | +49 0711 2842222 | NA | leonekohler@surfeu.de | 5 |
| 3 | Peacock | Jane | Sales Support Agent | 2 | 1973-08-29 00:00:00 | 2002-04-01 00:00:00 | 1111 6 Ave SW | Calgary | AB | Canada | T2P 5M5 | +1 (403) 262-3443 | +1 (403) 262-6712 | jane@chinookcorp.com | François | Tremblay | NA | 1498 rue Bélanger | Montréal | QC | Canada | H2G 1A7 | +1 (514) 721-4711 | NA | ftremblay@gmail.com | 3 |
| 4 | Park | Margaret | Sales Support Agent | 2 | 1947-09-19 00:00:00 | 2003-05-03 00:00:00 | 683 10 Street SW | Calgary | AB | Canada | T2P 5G3 | +1 (403) 263-4423 | +1 (403) 263-4289 | margaret@chinookcorp.com | Bjørn | Hansen | NA | Ullevålsveien 14 | Oslo | NA | Norway | 0171 | +47 22 44 22 22 | NA | bjorn.hansen@yahoo.no | 4 |
| 5 | Johnson | Steve | Sales Support Agent | 2 | 1965-03-03 00:00:00 | 2003-10-17 00:00:00 | 7727B 41 Ave | Calgary | AB | Canada | T3B 1Y7 | 1 (780) 836-9987 | 1 (780) 836-9543 | steve@chinookcorp.com | František | Wichterlová | JetBrains s.r.o. | Klanova 9/506 | Prague | NA | Czech Republic | 14700 | +420 2 4172 5555 | +420 2 4172 5555 | frantisekw@jetbrains.com | 4 |
| 6 | Mitchell | Michael | IT Manager | 1 | 1973-07-01 00:00:00 | 2003-10-17 00:00:00 | 5827 Bowness Road NW | Calgary | AB | Canada | T3B 0C5 | +1 (403) 246-9887 | +1 (403) 246-9899 | michael@chinookcorp.com | Helena | Holý | NA | Rilská 3174/6 | Prague | NA | Czech Republic | 14300 | +420 2 4177 0449 | NA | hholy@gmail.com | 5 |
Untuk memperlihatkan bahwa fungsi right_join() mengacu
pada tabel kedua, dalam hal ini adalah tabel customers,
perhatikan banyaknya baris pada tabel hasil penggabungan secara
right_jon berikut.
tally(right_join)| n |
|---|
| 59 |
Perhatikan bahwa banyaknya baris pada hasil penggabungan tabel secara
right_join adalah sama dengan tabel acuannya, yaitu
customers.
full_join()Fungsi full_join() menghasilkan semua baris dan kolom
dari x dan y. Jika ada nilai yang tidak sama
(match) antara x dan y, maka akan bernilai
NA.
Berikut ditampilkan hasil penggabungan secara full_join data pada
Tabel “employees” dan Tabel
“customers”, dengan identitas kolom yang dianggap sama
(primary key), yaitu
EmployeeId = CustomerId.
full_join <- employees %>% full_join(customers, by=c("EmployeeId"="CustomerId"))
head(full_join)| EmployeeId | LastName.x | FirstName.x | Title | ReportsTo | BirthDate | HireDate | Address.x | City.x | State.x | Country.x | PostalCode.x | Phone.x | Fax.x | Email.x | FirstName.y | LastName.y | Company | Address.y | City.y | State.y | Country.y | PostalCode.y | Phone.y | Fax.y | Email.y | SupportRepId |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Adams | Andrew | General Manager | NA | 1962-02-18 00:00:00 | 2002-08-14 00:00:00 | 11120 Jasper Ave NW | Edmonton | AB | Canada | T5K 2N1 | +1 (780) 428-9482 | +1 (780) 428-3457 | andrew@chinookcorp.com | Luís | Gonçalves | Embraer - Empresa Brasileira de Aeronáutica S.A. | Av. Brigadeiro Faria Lima, 2170 | São José dos Campos | SP | Brazil | 12227-000 | +55 (12) 3923-5555 | +55 (12) 3923-5566 | luisg@embraer.com.br | 3 |
| 2 | Edwards | Nancy | Sales Manager | 1 | 1958-12-08 00:00:00 | 2002-05-01 00:00:00 | 825 8 Ave SW | Calgary | AB | Canada | T2P 2T3 | +1 (403) 262-3443 | +1 (403) 262-3322 | nancy@chinookcorp.com | Leonie | Köhler | NA | Theodor-Heuss-Straße 34 | Stuttgart | NA | Germany | 70174 | +49 0711 2842222 | NA | leonekohler@surfeu.de | 5 |
| 3 | Peacock | Jane | Sales Support Agent | 2 | 1973-08-29 00:00:00 | 2002-04-01 00:00:00 | 1111 6 Ave SW | Calgary | AB | Canada | T2P 5M5 | +1 (403) 262-3443 | +1 (403) 262-6712 | jane@chinookcorp.com | François | Tremblay | NA | 1498 rue Bélanger | Montréal | QC | Canada | H2G 1A7 | +1 (514) 721-4711 | NA | ftremblay@gmail.com | 3 |
| 4 | Park | Margaret | Sales Support Agent | 2 | 1947-09-19 00:00:00 | 2003-05-03 00:00:00 | 683 10 Street SW | Calgary | AB | Canada | T2P 5G3 | +1 (403) 263-4423 | +1 (403) 263-4289 | margaret@chinookcorp.com | Bjørn | Hansen | NA | Ullevålsveien 14 | Oslo | NA | Norway | 0171 | +47 22 44 22 22 | NA | bjorn.hansen@yahoo.no | 4 |
| 5 | Johnson | Steve | Sales Support Agent | 2 | 1965-03-03 00:00:00 | 2003-10-17 00:00:00 | 7727B 41 Ave | Calgary | AB | Canada | T3B 1Y7 | 1 (780) 836-9987 | 1 (780) 836-9543 | steve@chinookcorp.com | František | Wichterlová | JetBrains s.r.o. | Klanova 9/506 | Prague | NA | Czech Republic | 14700 | +420 2 4172 5555 | +420 2 4172 5555 | frantisekw@jetbrains.com | 4 |
| 6 | Mitchell | Michael | IT Manager | 1 | 1973-07-01 00:00:00 | 2003-10-17 00:00:00 | 5827 Bowness Road NW | Calgary | AB | Canada | T3B 0C5 | +1 (403) 246-9887 | +1 (403) 246-9899 | michael@chinookcorp.com | Helena | Holý | NA | Rilská 3174/6 | Prague | NA | Czech Republic | 14300 | +420 2 4177 0449 | NA | hholy@gmail.com | 5 |
Untuk memperlihatkan bahwa fungsi full_join() mengacu
pada tabel dengan jumlah baris terbanyak, dalam hal ini adalah tabel
customers, perhatikan banyaknya baris pada tabel hasil
penggabungan secara full_jon berikut.
tally(full_join)| n |
|---|
| 59 |
Perhatikan bahwa banyaknya baris pada hasil penggabungan tabel secara
full_join adalah sama dengan tabel dengan jumlah baris
terbanyak, yaitu customers.
semi_join()Empat fungsi join sebelumnya, yaitu inner_join,
left_join, right_join, dan
full_join disebut dengan mutating join,
yang menggabungkan variabel dari dua sumber data. Sedangkan, dua fungsi
join berikutnya, yaitu semi_join dan anti_join
disebut dengan filtering joins, yaitu menyimpan kasus
dari tabel data kiri (yaitu data-X) dan menggunakan data yang benar
(yaitu data-Y) sebagai filter.
Fungsi semi_join() mengembalikan semua baris dari x di
mana ada nilai yang cocok di x, dan hanya menjaga kolom dari x. Fungsi
semi_join() berbeda dari inner_join() karena
inner_join akan mengembalikan satu baris x untuk setiap baris y yang
cocok, sedangkan semi_join tidak akan pernah menduplikasi baris x.
Dengan menggunakan tabel yang sama pada contoh sebelumnya, berikut
ditampilkan hasil penggabungan data secara semi_join pada Tabel
“employees” dan Tabel “customers”,
dengan identitas kolom yang dianggap sama (primary
key), yaitu EmployeeId = CustomerId.
semi_join <- employees %>% semi_join(customers, by=c("EmployeeId"="CustomerId"))
head(semi_join)| EmployeeId | LastName | FirstName | Title | ReportsTo | BirthDate | HireDate | Address | City | State | Country | PostalCode | Phone | Fax | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Adams | Andrew | General Manager | NA | 1962-02-18 00:00:00 | 2002-08-14 00:00:00 | 11120 Jasper Ave NW | Edmonton | AB | Canada | T5K 2N1 | +1 (780) 428-9482 | +1 (780) 428-3457 | andrew@chinookcorp.com |
| 2 | Edwards | Nancy | Sales Manager | 1 | 1958-12-08 00:00:00 | 2002-05-01 00:00:00 | 825 8 Ave SW | Calgary | AB | Canada | T2P 2T3 | +1 (403) 262-3443 | +1 (403) 262-3322 | nancy@chinookcorp.com |
| 3 | Peacock | Jane | Sales Support Agent | 2 | 1973-08-29 00:00:00 | 2002-04-01 00:00:00 | 1111 6 Ave SW | Calgary | AB | Canada | T2P 5M5 | +1 (403) 262-3443 | +1 (403) 262-6712 | jane@chinookcorp.com |
| 4 | Park | Margaret | Sales Support Agent | 2 | 1947-09-19 00:00:00 | 2003-05-03 00:00:00 | 683 10 Street SW | Calgary | AB | Canada | T2P 5G3 | +1 (403) 263-4423 | +1 (403) 263-4289 | margaret@chinookcorp.com |
| 5 | Johnson | Steve | Sales Support Agent | 2 | 1965-03-03 00:00:00 | 2003-10-17 00:00:00 | 7727B 41 Ave | Calgary | AB | Canada | T3B 1Y7 | 1 (780) 836-9987 | 1 (780) 836-9543 | steve@chinookcorp.com |
| 6 | Mitchell | Michael | IT Manager | 1 | 1973-07-01 00:00:00 | 2003-10-17 00:00:00 | 5827 Bowness Road NW | Calgary | AB | Canada | T3B 0C5 | +1 (403) 246-9887 | +1 (403) 246-9899 | michael@chinookcorp.com |
Perhatikan bahwa jumlah baris dan kolom pada tabel hasil penggabungan secara semi_join sama dengan jumlah baris dan kolom pada tabel x “employees”, sedangkan pada inner_join, jumlah kolomnya merupakan penggabungan dari jumlah kolom pada tabel x “employees” dan tabel y “customers”.
anti_join()Fungsi anti_join() hanya menyimpan baris yang tidak ada
di data sebelah kanan DAN hanya menyimpan kolom di data sebelah kiri.
Fungsi anti_join mengembalikan semua baris dari x di mana tidak ada
nilai yang cocok di y dan mempertahankan hanya kolom dari x. Berikut
gambar ilustrasi dari fungs anti_join().
Masih dengan tabel yang sama pada contoh sebelumnya, berikut
ditampilkan hasil penggabungan data secara anti_join pada Tabel
“employees” dan Tabel “customers”,
dengan identitas kolom yang dianggap sama (primary
key), yaitu EmployeeId = CustomerId.
anti_join <- employees %>% anti_join(customers, by=c("EmployeeId"="CustomerId"))
head(anti_join)| EmployeeId | LastName | FirstName | Title | ReportsTo | BirthDate | HireDate | Address | City | State | Country | PostalCode | Phone | Fax |
|---|
Terlihat dari hasil penggabungan tabel secara anti_join, tidak ada baris yang ditampilkan, hal itu berarti tidak ada nilai dari tabel x yang bukan merupakan irisan dari tabel y, sehingga hanya dapat ditampilkan jumlah kolomnya yang berjumlah 15 (jumlah kolom pada tabel x “employees”.
IPB University-Prodi Statistika dan Sains Data 2021↩︎