1 Objective

Ini adalah bagian pertama dari bebrapa tulisan tentang database dan R. Dalam rangkaian tulisan ini akan membahas cara membuat koneksi R dan beberapa database yang banyak digunakan, import dan export data. Database yang akan dibahas (yang pernah digunakan oleh penulis :P) adalah Ms Excel (Excel sebagai database? Ya!), SQLite, MySQL, PostgreSQL, dan Ms SQL Server (via ODBC). Pada tulisan ini akan dibahas penggunaan Ms Excel sebagai database. Anda dapat mebaca posting berikutnya tentang penggunaan R dan SQLite.

2 Ms Excel

Tentu saja Ms Excel juga dapat digunakan seperti sebuah database. Sebuah file Excel dianggap sebagai sebuah database dan masing-masing sheet yang ada di dalamnya dianggap sebagai sebuah tabel. Data untuk tutorial ini dapat Anda download disini. Terminologi yang digunakan dalam tulisan ini:

Istilah Padanan
database Ms Excel/Excel File Ms Excel
tabel/worksheet worksheet di Ms Excel

2.1 Load package and Import Data

library(openxlsx)

openxlsx mempunyai banyak kelebihan dari beberapa package lain yang digunakan untuk interface R dan Ms Excel. Diantaranya dapat menyimpan data dari R ke Excel (export), Conditional Formating, Freeze Pane, dll.

wb <- loadWorkbook(file = "XLSXdb.xlsx")
names(wb) # nama sheet
[1] "iris"   "mtcars"

Terdapat 2 tabel (worksheet) yang ada pada database Excel tersebut, yaitu iris pada worksheet pertama dan mtcars pada worksheet kedua. Selanjutnya import tabel dari database Excel sebagai data.frame menggunakan fungsi readWorkbook().

iris_xl <- readWorkbook(xlsxFile = wb, sheet = "iris")
mtcars_xl <- readWorkbook(xlsxFile = wb, sheet = 2)
head(iris_xl)
head(mtcars_xl)

Dua tabel pada database Excel tersebut berhasil diimport ke R.

2.2 Export Data

Untuk menyimpan data.frame di R ke database Excel sebagai berikut.

  • Simpan di worksheet baru

Misalnya Anda ingin menyimpan data ke database Excel dan ingin menyimpannya di sebuah worksheet baru yang belum ada. Jika dianalogikan dengan database pada umumnya, hal ini seperti membuat sebuah tabel baru yang belum ada di database. Misalnya Anda akan menyimpan data.frame cars ke database Excel.

  • Langkah pertama adalah membuat worksheet baru dengan fungsi addWorksheet().
addWorksheet(wb, sheetName = "cars")

Worksheet yang baru tersebut bernama cars.

  • Langkah kedua menuliskan data ke worksheet baru tadi. Anda dapat menggunakan fungsi writeData() atau writeDataTable().
writeDataTable(wb = wb, sheet = "cars", x = cars)
  • Langkah terakhir adalah menyimpan workbook atau database Excel tersebut.
saveWorkbook(wb, file = "XLSXdb.xlsx", overwrite = TRUE)
  • Simpan di worksheet yang sudah ada

Sayangnya package openxlsx belum mendukung untuk menyimpan tabel pada worksheet yang sudah ada (replace). Namun Anda masih tetap dapat me-replace dengan cara berikut.

  • Menghapus tabel atau worksheet yang sudah ada.
removeWorksheet(wb, sheet = "cars")
  • Menambahkan worksheet baru
addWorksheet(wb, sheetName = "cars")
  • Menuliskan data ke dalam worksheet
writeDataTable(wb, sheet = "cars", x = women) # mengganti data pada worksheet yang sama dengan data lain
  • Menyimpan database atau workbook
saveWorkbook(wb, file = "XLSXdb.xlsx", overwrite = TRUE)
LS0tDQp0aXRsZTogICJDb25uZWN0IERhdGFiYXNlcyBhbmQgUiAtIE1zIEV4Y2VsIg0KYXV0aG9yOiAiQnkgQWVwIEhpZGF5YXR1bG9oIg0KZGF0ZTogICAiMjAxOSBBdWd1c3QgMTciDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IHNwYWNlbGFiDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCi0tLQ0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KDQpib2R5eyAvKiBOb3JtYWwgICovDQogICAgICBmb250LXNpemU6IDE0cHg7DQogIH0NCnRkIHsgIC8qIFRhYmxlICAqLw0KICBmb250LXNpemU6IDEycHg7DQp9DQpoMS50aXRsZSB7DQogIGZvbnQtc2l6ZTogMzhweDsNCiAgY29sb3I6IGxpZ2h0Ymx1ZTsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQpoMSB7IC8qIEhlYWRlciAxICovDQogIGZvbnQtc2l6ZTogMjRweDsNCiAgY29sb3I6IERhcmtCbHVlOw0KfQ0KaDIgeyAvKiBIZWFkZXIgMiAqLw0KICBmb250LXNpemU6IDIwcHg7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCn0NCmgzIHsgLyogSGVhZGVyIDMgKi8NCiAgZm9udC1zaXplOiAxNnB4Ow0KIyAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCn0NCmg0IHsgLyogSGVhZGVyIDQgKi8NCiAgZm9udC1zaXplOiAxNHB4Ow0KICBjb2xvcjogRGFya0JsdWU7DQp9DQpjb2RlLnJ7IC8qIENvZGUgYmxvY2sgKi8NCiAgICBmb250LXNpemU6IDEycHg7DQp9DQpwcmUgeyAvKiBDb2RlIGJsb2NrIC0gZGV0ZXJtaW5lcyBjb2RlIHNwYWNpbmcgYmV0d2VlbiBsaW5lcyAqLw0KICAgIGZvbnQtc2l6ZTogMTJweDsNCn0NCjwvc3R5bGU+DQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoja25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSwgcmVzdWx0cz0naG9sZCcsIHdhcm5pbmc9RkFMU0UsIGZpZy5zaG93PSdob2xkJywgbWVzc2FnZT1GQUxTRSkgDQpvcHRpb25zKHNjaXBlbiA9IDk5KQ0KYGBgDQoNCg0KIyBPYmplY3RpdmUNCg0KSW5pIGFkYWxhaCBiYWdpYW4gcGVydGFtYSBkYXJpIGJlYnJhcGEgdHVsaXNhbiB0ZW50YW5nIGRhdGFiYXNlIGRhbiBSLiBEYWxhbSByYW5na2FpYW4gdHVsaXNhbiBpbmkgYWthbiBtZW1iYWhhcyBjYXJhIG1lbWJ1YXQga29uZWtzaSBSIGRhbiBiZWJlcmFwYSBkYXRhYmFzZSB5YW5nIGJhbnlhayBkaWd1bmFrYW4sIGltcG9ydCBkYW4gZXhwb3J0IGRhdGEuIERhdGFiYXNlIHlhbmcgYWthbiBkaWJhaGFzICh5YW5nIHBlcm5haCBkaWd1bmFrYW4gb2xlaCBwZW51bGlzIDpQKSBhZGFsYWggTXMgRXhjZWwgKEV4Y2VsIHNlYmFnYWkgZGF0YWJhc2U/IFlhISksIFNRTGl0ZSwgTXlTUUwsIFBvc3RncmVTUUwsIGRhbiBNcyBTUUwgU2VydmVyICh2aWEgT0RCQykuIFBhZGEgdHVsaXNhbiBpbmkgYWthbiBkaWJhaGFzIHBlbmdndW5hYW4gTXMgRXhjZWwgc2ViYWdhaSBkYXRhYmFzZS4gQW5kYSBkYXBhdCBtZWJhY2EgcG9zdGluZyBiZXJpa3V0bnlhIHRlbnRhbmcgcGVuZ2d1bmFhbiA8YSBocmVmPSJodHRwOi8vcnB1YnMuY29tL2FlcGhpZGF5YXR1bG9oL3JkYi1zcWxpdGUiIHRhcmdldD0iX2JsYW5rIj5SIGRhbiBTUUxpdGU8L2E+Lg0KDQojIE1zIEV4Y2VsDQoNClRlbnR1IHNhamEgTXMgRXhjZWwganVnYSBkYXBhdCBkaWd1bmFrYW4gc2VwZXJ0aSBzZWJ1YWggZGF0YWJhc2UuIFNlYnVhaCBmaWxlIEV4Y2VsIGRpYW5nZ2FwIHNlYmFnYWkgc2VidWFoIGRhdGFiYXNlIGRhbiBtYXNpbmctbWFzaW5nIHNoZWV0IHlhbmcgYWRhIGRpIGRhbGFtbnlhIGRpYW5nZ2FwIHNlYmFnYWkgc2VidWFoIHRhYmVsLiBEYXRhIHVudHVrIHR1dG9yaWFsIGluaSBkYXBhdCBBbmRhIGRvd25sb2FkIFtkaXNpbmldKGh0dHBzOi8vZ2l0aHViLmNvbS9hZXBoaWRheWF0dWxvaC9kYXRhc2V0cy9ibG9iL21hc3Rlci9YTFNYZGIueGxzeCkuIFRlcm1pbm9sb2dpIHlhbmcgZGlndW5ha2FuIGRhbGFtIHR1bGlzYW4gaW5pOg0KDQp8IElzdGlsYWggfCBQYWRhbmFuICB8DQp8LS0tLS0tLS0tfC0tLS0tLS0tLS18DQp8IGRhdGFiYXNlIE1zIEV4Y2VsL0V4Y2VsIHwgRmlsZSBNcyBFeGNlbCB8DQp8IHRhYmVsL3dvcmtzaGVldCB8IHdvcmtzaGVldCBkaSBNcyBFeGNlbCB8DQoNCg0KIyMgTG9hZCBwYWNrYWdlIGFuZCBJbXBvcnQgRGF0YQ0KDQpgYGB7cn0NCmxpYnJhcnkob3Blbnhsc3gpDQpgYGANCg0KYG9wZW54bHN4YCBtZW1wdW55YWkgYmFueWFrIGtlbGViaWhhbiBkYXJpIGJlYmVyYXBhIHBhY2thZ2UgbGFpbiB5YW5nIGRpZ3VuYWthbiB1bnR1ayBpbnRlcmZhY2UgUiBkYW4gTXMgRXhjZWwuIERpYW50YXJhbnlhIGRhcGF0IG1lbnlpbXBhbiBkYXRhIGRhcmkgUiBrZSBFeGNlbCAoZXhwb3J0KSwgKkNvbmRpdGlvbmFsIEZvcm1hdGluZyosICpGcmVlemUgUGFuZSosIGRsbC4NCg0KYGBge3J9DQp3YiA8LSBsb2FkV29ya2Jvb2soZmlsZSA9ICJYTFNYZGIueGxzeCIpDQpuYW1lcyh3YikgIyBuYW1hIHNoZWV0DQpgYGANCg0KVGVyZGFwYXQgMiB0YWJlbCAod29ya3NoZWV0KSB5YW5nIGFkYSBwYWRhIGRhdGFiYXNlIEV4Y2VsIHRlcnNlYnV0LCB5YWl0dSBgaXJpc2AgcGFkYSB3b3Jrc2hlZXQgcGVydGFtYSBkYW4gYG10Y2Fyc2AgcGFkYSB3b3Jrc2hlZXQga2VkdWEuIFNlbGFuanV0bnlhIGltcG9ydCB0YWJlbCBkYXJpIGRhdGFiYXNlIEV4Y2VsIHNlYmFnYWkgZGF0YS5mcmFtZSBtZW5nZ3VuYWthbiBmdW5nc2kgYHJlYWRXb3JrYm9vaygpYC4NCg0KYGBge3J9DQppcmlzX3hsIDwtIHJlYWRXb3JrYm9vayh4bHN4RmlsZSA9IHdiLCBzaGVldCA9ICJpcmlzIikNCm10Y2Fyc194bCA8LSByZWFkV29ya2Jvb2soeGxzeEZpbGUgPSB3Yiwgc2hlZXQgPSAyKQ0KYGBgDQoNCmBgYHtyfQ0KaGVhZChpcmlzX3hsKQ0KaGVhZChtdGNhcnNfeGwpDQpgYGANCg0KRHVhIHRhYmVsIHBhZGEgZGF0YWJhc2UgRXhjZWwgdGVyc2VidXQgYmVyaGFzaWwgZGlpbXBvcnQga2UgUi4NCg0KIyMgRXhwb3J0IERhdGENCg0KVW50dWsgbWVueWltcGFuIGRhdGEuZnJhbWUgZGkgUiBrZSBkYXRhYmFzZSBFeGNlbCBzZWJhZ2FpIGJlcmlrdXQuDQoNCiogU2ltcGFuIGRpIHdvcmtzaGVldCBiYXJ1DQoNCk1pc2FsbnlhIEFuZGEgaW5naW4gbWVueWltcGFuIGRhdGEga2UgZGF0YWJhc2UgRXhjZWwgZGFuIGluZ2luIG1lbnlpbXBhbm55YSBkaSBzZWJ1YWggd29ya3NoZWV0IGJhcnUgeWFuZyBiZWx1bSBhZGEuIEppa2EgZGlhbmFsb2dpa2FuIGRlbmdhbiBkYXRhYmFzZSBwYWRhIHVtdW1ueWEsIGhhbCBpbmkgc2VwZXJ0aSBtZW1idWF0IHNlYnVhaCB0YWJlbCBiYXJ1IHlhbmcgYmVsdW0gYWRhIGRpIGRhdGFiYXNlLiBNaXNhbG55YSBBbmRhIGFrYW4gbWVueWltcGFuIGRhdGEuZnJhbWUgYGNhcnNgIGtlIGRhdGFiYXNlIEV4Y2VsLiANCg0KICAgKyBMYW5na2FoIHBlcnRhbWEgYWRhbGFoIG1lbWJ1YXQgd29ya3NoZWV0IGJhcnUgZGVuZ2FuIGZ1bmdzaSBgYWRkV29ya3NoZWV0KClgLg0KDQpgYGB7cn0NCmFkZFdvcmtzaGVldCh3Yiwgc2hlZXROYW1lID0gImNhcnMiKQ0KYGBgDQoNCldvcmtzaGVldCB5YW5nIGJhcnUgdGVyc2VidXQgYmVybmFtYSBgY2Fyc2AuDQoNCiAgICsgTGFuZ2thaCBrZWR1YSBtZW51bGlza2FuIGRhdGEga2Ugd29ya3NoZWV0IGJhcnUgdGFkaS4gQW5kYSBkYXBhdCBtZW5nZ3VuYWthbiBmdW5nc2kgYHdyaXRlRGF0YSgpYCBhdGF1IGB3cml0ZURhdGFUYWJsZSgpYC4gDQogICANCmBgYHtyfQ0Kd3JpdGVEYXRhVGFibGUod2IgPSB3Yiwgc2hlZXQgPSAiY2FycyIsIHggPSBjYXJzKQ0KYGBgDQoNCiAgICsgTGFuZ2thaCB0ZXJha2hpciBhZGFsYWggbWVueWltcGFuIHdvcmtib29rIGF0YXUgZGF0YWJhc2UgRXhjZWwgdGVyc2VidXQuDQogICANCmBgYHtyfQ0Kc2F2ZVdvcmtib29rKHdiLCBmaWxlID0gIlhMU1hkYi54bHN4Iiwgb3ZlcndyaXRlID0gVFJVRSkNCmBgYA0KDQoqIFNpbXBhbiBkaSB3b3Jrc2hlZXQgeWFuZyBzdWRhaCBhZGENCg0KU2F5YW5nbnlhIHBhY2thZ2UgYG9wZW54bHN4YCBiZWx1bSBtZW5kdWt1bmcgdW50dWsgbWVueWltcGFuIHRhYmVsIHBhZGEgd29ya3NoZWV0IHlhbmcgc3VkYWggYWRhIChfcmVwbGFjZV8pLiBOYW11biBBbmRhIG1hc2loIHRldGFwIGRhcGF0IG1lLXJlcGxhY2UgZGVuZ2FuIGNhcmEgYmVyaWt1dC4NCg0KICAgKyBNZW5naGFwdXMgdGFiZWwgYXRhdSB3b3Jrc2hlZXQgeWFuZyBzdWRhaCBhZGEuDQogICANCmBgYHtyfQ0KcmVtb3ZlV29ya3NoZWV0KHdiLCBzaGVldCA9ICJjYXJzIikNCmBgYA0KDQogICArIE1lbmFtYmFoa2FuIHdvcmtzaGVldCBiYXJ1DQpgYGB7cn0NCmFkZFdvcmtzaGVldCh3Yiwgc2hlZXROYW1lID0gImNhcnMiKQ0KYGBgDQoNCiAgICsgTWVudWxpc2thbiBkYXRhIGtlIGRhbGFtIHdvcmtzaGVldA0KYGBge3J9DQp3cml0ZURhdGFUYWJsZSh3Yiwgc2hlZXQgPSAiY2FycyIsIHggPSB3b21lbikgIyBtZW5nZ2FudGkgZGF0YSBwYWRhIHdvcmtzaGVldCB5YW5nIHNhbWEgZGVuZ2FuIGRhdGEgbGFpbg0KYGBgDQoNCiAgICsgTWVueWltcGFuIGRhdGFiYXNlIGF0YXUgd29ya2Jvb2sNCmBgYHtyfQ0Kc2F2ZVdvcmtib29rKHdiLCBmaWxlID0gIlhMU1hkYi54bHN4Iiwgb3ZlcndyaXRlID0gVFJVRSkNCmBgYA0KDQo=