Passing a string as variable name in dplyr. Yup bagi pengolah data berbasis data frame, kita selalu dimudahkan dengan package dplyr / tidy di R. Cara kerjanya mirip-mirip dengan bahasa SQL sehingga urusan Pivot, aggregasi data menjadi lebih mudah.
Ada hal menarik pada dplyr yaitu select kolom tidak menggunakan string akan tetapi dianggap simbol. Jadi ketika kita akan memilih kolom yang akan digunakan maka tidak bisa di passing as string. Contohnya sebagai berikut kita mempunyai data nasabah kredit dengan fitur berupa penghasilan dan luas rumah yang akan dikategorikan sebagai penerima kredit atau tidak.
library(dplyr) penghasilan= c('rendah','rendah','sedang','tinggi','tinggi') luas = c('kecil','sedang','sedang','kecil','besar') kredit = c('ya','ya','tidak','ya','tidak') dat = data.frame(penghasilan, luas, kredit)
Tentu untuk mendapatkan frekuensi penghasilan dengan anggota {rendah, sedang, tinggi} pada kredit sebagai berikut
dat %>% select(penghasilan,kredit) %>% group_by(penghasilan,kredit) %>% summarise(frekuensi = n())
atau cara cepatnya yaitu
dat %>% count(penghasilan,kredit)
hasilnya
penghasilan kredit frekuensi <chr> <chr> <int> 1 rendah ya 2 2 sedang tidak 1 3 tinggi tidak 1 4 tinggi ya 1
Sampai disini tidak ada masalah! cuman dengan menggunakan teknik diatas kurang praktis karena nama kolom {penghasilan, luas, kredit} bisa saja berbeda untuk tiap kasus sehingga passing diatas kurang bagus
Operator !!as.symbol()
Passing String sebagai Variabel Kolom dplyr / menjadikan string sebagai variabel pada dplyr kalian harus menggunakan operator !!as.symbol(), bila tidak menggunakan hal tersebut tidak akan bisa, mari kita coba
dat %>% select("penghasilan","kredit") %>% group_by("penghasilan","kredit") %>% summarise(frekuensi = n())
hasilnya
`"penghasilan"` `"kredit"` frekuensi <chr> <chr> <int> 1 penghasilan kredit 5
Yuk kita ubah seperti berikut
f = "penghasilan" k = "kredit" dat %>% select(!!as.symbol(f),!!as.symbol(k)) %>% group_by(!!as.symbol(f),!!as.symbol(k)) %>% summarise(frekuensi = n())
hasilnya sebagai berikut
penghasilan kredit frekuensi <chr> <chr> <int> 1 rendah ya 2 2 sedang tidak 1 3 tinggi tidak 1 4 tinggi ya 1
kalian bisa mengganti f = “luas” untuk mendapatkan frekuensi luas rumah. Penggunaan !!as.symbols() akan sangat perlu karena menjadi luwes hanya dengan mengganti nama kolom dengan string. Misalkan untuk menghitung algoritma naive bayes.
ref: