Paket yang akan digunakan
library(utils)
library(foreign)
library(DBI)
## Warning: package 'DBI' was built under R version 4.0.5
library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.0.5
Set working directory ke folder yang berisi data/ tempat menyimpan data.
setwd("~/Annissa/data")
Paket utils digunakan untuk membaca atau menulis data dengan format csv. Membaca data
data1 <- read.csv("penduduk.csv")
head(data1)
## Shape_Leng Shape_Area ADM1_EN ADM1_PCODE Jumlah_Penduduk
## 1 27.367364 4.62543728 Aceh ID11 5274871
## 2 6.026648 0.45871703 Bali ID51 4317404
## 3 9.279900 0.76491115 Banten ID36 11904562
## 4 11.653771 1.63012892 Bengkulu ID17 2010670
## 5 3.341561 0.26012975 Daerah Istimewa Yogyakarta ID34 3668719
## 6 3.123689 0.05342567 Dki Jakarta ID31 10562088
Menyimpan data
nama <- c("a", "b", "c", "d", "e")
nilai <- c(100, 90, 80, 70, 60)
data2 <- cbind(nama,nilai)
head(data2)
## nama nilai
## [1,] "a" "100"
## [2,] "b" "90"
## [3,] "c" "80"
## [4,] "d" "70"
## [5,] "e" "60"
menyimpan data dalam format csv dengan syntax berikut.
write.csv(data2, "data2.csv")
Dari gambar di atas, data telah tersimpan pada folder data. Apabila csv dalam angka format Indonesia, maka pemisah antar kolom akan menggunakan ; (semicolon). Terdapat sedikit perbedaan, yaitu untuk membaca data menggunakan fungsi read.csv2() dan untuk menyimpan data menggunakan fungsi write.csv2().
Paket foreign digunakan untuk membaca atau menulis data pada dbase dan aplikasi statistik umum. Berikut adalah beberapa contohnya
membaca data
data3 <- read.dbf("idn_admbnda_adm3_bps_20200401.dbf")
head(data3)
## Shape_Leng Shape_Area ADM3_EN ADM3_PCODE ADM3_REF ADM3ALT1EN
## 1 0.2798656 0.003107633 2 X 11 Enam Lingkung ID1306050 <NA> <NA>
## 2 0.7514001 0.016925540 2 X 11 Kayu Tanam ID1306052 <NA> <NA>
## 3 0.6900061 0.024636382 Abab ID1612030 <NA> <NA>
## 4 0.6483629 0.010761277 Abang ID5107050 <NA> <NA>
## 5 0.2437073 0.001160459 Abeli ID7471021 <NA> <NA>
## 6 1.3541886 0.069956902 Abenaho ID9432030 <NA> <NA>
## ADM3ALT2EN ADM2_EN ADM2_PCODE ADM1_EN ADM1_PCODE
## 1 <NA> Padang Pariaman ID1306 Sumatera Barat ID13
## 2 <NA> Padang Pariaman ID1306 Sumatera Barat ID13
## 3 <NA> Penukal Abab Lematang Ilir ID1612 Sumatera Selatan ID16
## 4 <NA> Karang Asem ID5107 Bali ID51
## 5 <NA> Kota Kendari ID7471 Sulawesi Tenggara ID74
## 6 <NA> Yalimo ID9432 Papua ID94
## ADM0_EN ADM0_PCODE date validOn validTo
## 1 Indonesia ID 2019-12-20 2020-04-01 <NA>
## 2 Indonesia ID 2019-12-20 2020-04-01 <NA>
## 3 Indonesia ID 2019-12-20 2020-04-01 <NA>
## 4 Indonesia ID 2019-12-20 2020-04-01 <NA>
## 5 Indonesia ID 2019-12-20 2020-04-01 <NA>
## 6 Indonesia ID 2019-12-20 2020-04-01 <NA>
menyimpan data
write.dbf(data2, "data2.dbf")
membaca data hanya dapat dilakukan khusus versi tertentu, yaitu version 5-12.
menyimpan data
write.dta(data3, "data3.dta")
Data akan tersimpan pada folder data yang sudah disetting di awal, seperti berikut.
Paket ini digunakan untuk menghubungkan dataframe dengan database relational. Harus diimplementasikan dengan paket R
Menciptakan database baru menggunakan dbConnect()
mydb <- dbConnect(RSQLite::SQLite(),"database.sqlite")
Jika database sementara (tidak ingin disimpan) maka bisa menggunakan "" sebagai ganti nama file database yang akan dibuat.
Mengcopy data frame menggunakan dbWriteTable()
dbWriteTable(mydb, "mtcars", mtcars)
dbWriteTable(mydb, "iris", iris)
dbListTables(mydb)
## [1] "iris" "mtcars"
Data akan tersimpan pada dbbaru.sqlite di folder data.
Queries menggunakan dbGetQuery()
dbGetQuery(mydb, 'SELECT * FROM mtcars LIMIT 5')
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Tidak semua nama variabel R valid dengan nama variabel SQL, dibutuhkan “namavar”
dbGetQuery(mydb, 'SELECT * FROM iris WHERE "Sepal.Length"
< 4.6')
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 4.4 2.9 1.4 0.2 setosa
## 2 4.3 3.0 1.1 0.1 setosa
## 3 4.4 3.0 1.3 0.2 setosa
## 4 4.5 2.3 1.3 0.3 setosa
## 5 4.4 3.2 1.3 0.2 setosa
Batched queries untuk mempartisi hasil queries menjadi beberapa bagian dengan cara menentukan jumlah baris maksimum (n) setiap partisinya.
rs <- dbSendQuery(mydb, 'SELECT * FROM mtcars')
while (!dbHasCompleted(rs)) {
dat.f <- dbFetch(rs, n = 10)
print(nrow(dat.f))
}
## [1] 10
## [1] 10
## [1] 10
## [1] 2
dbClearResult(rs)
Multiple parameterised queries
rs <- dbSendQuery(mydb, 'SELECT * FROM iris WHERE
"Sepal.Length" < :x')
dbBind(rs, param = list(x = 4.5))
nrow(dbFetch(rs))
## [1] 4
dbBind(rs, param = list(x = 4.4))
nrow(dbFetch(rs))
## [1] 1
multiple parameters dalam satu panggilan dengan syntax berikut
dbBind(rs, param = list(x = seq(4.4, 4.5, by=0.1)))
nrow(dbFetch(rs))
## [1] 5
dbClearResult(rs)
DBI memiliki fungsi dbSendStatement() dan dbExecute() untuk statement SQL yang tidak menghasilkan tabular. Contohnya pada statement Delete berikut.
dbExecute(mydb, 'DELETE FROM iris WHERE
"Sepal.Length" < 4')
## [1] 0
rs <- dbSendStatement(mydb, 'DELETE FROM iris
WHERE "Sepal.Length" < :x')
dbBind(rs, param = list(x = 4.5))
dbGetRowsAffected(rs)
## [1] 4
dbClearResult(rs)
dbDisconnect(mydb)