Passing String sebagai Variabel Kolom di dplyr

By | January 19, 2023
Print Friendly, PDF & Email
456 Views

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.

See also  Plot Grafik Interaktif

ref:

stackoverflow