×

Belajar R-Manipulasi Data Frame dengan dplyr

Belajar R-Manipulasi Data Frame dengan dplyr

3,421 Views

Dplyr adalah package yang sangat powerfull ketika kalian bekerja menggunakan data frame yang berguna untuk operasi manipulasi data. Package dplyr sangat populer digunakan oleh kalangan pengguna bahasa R yang ditulis oleh programmer R bernama Hadley Wickham yang juga menulis banyak package terkenal lainnya seperti ggplot dan tidyverse.

Mengapa menggunakan dplyr

Dplyr datang dengan banyak function seperti layaknya bahasa SQL yaitu filtering, selecting, sorting, adding, deleting, joining serta agregating yang sangat mudah dilakukan tanpa ribet bahkan dengan pipping kalian menggabungkan banyak operasi dalam satu kode saja bahkan kalau kalian menggunakan matlab seperti table ataupun Python dengan Pandas nya, maka dplyr jauh lebih dari itu yaitu sangat intuitif sekali. Apalagi kalau kalian yang sudah mengenal / terbiasa menggunakan perintah SQL, maka akan terbiasa menggunakan perintah-perintah dplyr. Sebelum kalian belajar package dplyr tentu ada beberapa hal yang harus kalian pahami mengenai operator boolean disini serta loading dataset disini.

Pengalaman penulis menggunakan dplyr untuk mempercepat analisis sebuah data sangat disarankan kalian menggunakan package ini, selain ringan dan tidak perintah-perintah yang digunakan mudah dipahami juga tersediannya operasi pipping yaitu menggabungkan beberapa operasi menjadi satu perintah berkesinambungan.

Install dan loading package

Package ini sudah tersedia di C-RAN. Untuk proses install dan loading package seperti biasa dengan perintah berikut

install.packages("dplyr")
library(dplyr)

Pastikan pc/laptop kalian sudah terhubung ke internet, atau kalian baca lagi mengenai cara install package di R

Daftar Perintah dplyr

Nama perintah yang digunakan mencerminkan kegunaan dari perintah itu sendiri. Berikut beberapa perintah penting yang sering digunakan untuk melakukan manipulasi data frame

Apalagi kalau sudah memahami jenis-jenis operator di Bahasa R tentu kalian akan terkejut (mengingat background penulis banyak menggunakan SPPS sebelumnya) betapa mudahnya melakukan grouping sebuah dataset yang berbanding terbalik seperti tools WEKA, ORANGE, Octave. Banyak sekali perintah-perintah selain 7 diatas, tapi dengan mempelajari dasar-dasar 7 perintah tersebut kalian sudah sangat terbantu melakukan analisis dan manipulasi data frame.

Dataset

Penulis sudah membuat dataset simple dan tidak banyak kolom untuk mempermudah visualisasi penggunaan package dplyr yang disimpan dengan format csv dengan nama uas.csv. Dataset tersebut merupakan data nilai ujian akhir sekolah dengan beberapa mata pelajaran untuk jurusan IPA dan IPS, oiya untuk kolom nilai 2 yang merupakan nilai ulangan ke 1 dan 2. Download dataset uas

Loading dataset menggunakan perintah yang telah kita bahas sebelumnya yaitu read.csv()

uas <- read.csv('uas.csv')
print(head(uas))

hasil

     no mata_pelajaran jurusan kelas nilai1 nilai2
1  1        sejarah     IPA    1A     89     87
2  2        sejarah     IPA    2A     96     90
3  3     matematika     IPA    1A     80     81
4  4     matematika     IPA    2A     79     78
5  5        sejarah     IPS    1B     77     78
6  6        sejarah     IPS    1C     78     77

Operasi properties

Sebelum melihat operasi lebih lanjut, ada baiknya kalian harus mengetahui properties dari sebuah dataset seperti  nama kolom, dimensi baris-kolom, serta data-data yang terkandung didalamnya.

Mendapatkan nama kolom dengan perintah colnames()

colnames(uas)

hasil

[1] "no"             "mata_pelajaran" "jurusan"        "kelas"          "nilai1"         "nilai2"

Mendapatkan jumlah baris dan kolom dengan perintah dim()

print(dim(uas))

hasil

[1] 12  6

dataset diatas ternyata terdiri dari 12 baris dan 6 kolom.

Mendapatkan data yang unik tiap kolom  dengan 2 perintah yang digabungkan yaitu levels() dan factor(). Misalkan untuk mata_pelajaran terdapat 3 mata pelajaran

levels(factor(uas$mata_pelajaran))

hasil

"akuntansi"  "matematika" "sejarah"

Pengurutan data / Sorting

Adakalanya kalian ingin menampilkan sebuah data berdasarkan urutan / sorting, dengan menggunakan operasi select() dan arrange() hal tersebut sangat mudah dilakukan

nilai_urutan<-arrange(select(uas,no,mata_pelajaran,jurusan,kelas,nilai1),desc(nilai1))
print(nilai_urutan)

hasil

   no mata_pelajaran jurusan kelas nilai1
1   2        sejarah     IPA    2A     96
2  10      akuntansi     IPS    1C     95
3  11      akuntansi     IPS    2B     94
4  12      akuntansi     IPS    2C     91
5   1        sejarah     IPA    1A     89
6   9      akuntansi     IPS    1B     88
7   8        sejarah     IPS    2C     87
8   3     matematika     IPA    1A     80
9   4     matematika     IPA    2A     79
10  6        sejarah     IPS    1C     78
11  5        sejarah     IPS    1B     77
12  7        sejarah     IPS    2B     76

Operasi Select

Operasi select digunakan untuk menyeleksi kolom-kolom yang telah ditentukan oleh kita sebelumnya. Misalkan  hanya untuk menampilkan mata_pelajaran, jurusan

nilai_IPA_IPS<- select(uas,c(mata_pelajaran,jurusan))
print(nilai_IPA_IPS)

hasil

   mata_pelajaran jurusan
1         sejarah     IPA
2         sejarah     IPA
3      matematika     IPA
4      matematika     IPA
5         sejarah     IPS
6         sejarah     IPS
7         sejarah     IPS
8         sejarah     IPS
9       akuntansi     IPS
10      akuntansi     IPS
11      akuntansi     IPS
12      akuntansi     IPS

Operasi Filtering

Operasi filtering digunakan untuk memfilter dengan syarat kondisi tertentu seperti menggunakan operator boolean dan perbandingan. Misalkan menampilkan jurusan==’IPA’ dan mata_pelajaran==’sejarah’

sejarah_IPA<-filter(uas,jurusan=='IPA' & mata_pelajaran=='sejarah')
print(sejarah_IPA)

hasil

  no mata_pelajaran jurusan kelas nilai1 nilai2
1  1        sejarah     IPA    1A     89     87
2  2        sejarah     IPA    2A     96     90
3  8        sejarah     IPS    2C     87     98
4 12      akuntansi     IPS    2C     91     97

Mutate

Digunakan untuk menambahkan kolom, misalkan akan menambah kolom baru yang merupakan

    \[rerata = \frac{nilai1+nilai2}{2}\]

rerata_nilai <-mutate(uas,rerata = (nilai1+nilai2)*0.5)
print(rerata_nilai)

hasil

   no mata_pelajaran jurusan kelas nilai1 nilai2 rerata
1   1        sejarah     IPA    1A     89     87   88.0
2   2        sejarah     IPA    2A     96     90   93.0
3   3     matematika     IPA    1A     80     81   80.5
4   4     matematika     IPA    2A     79     78   78.5
5   5        sejarah     IPS    1B     77     78   77.5
6   6        sejarah     IPS    1C     78     77   77.5
7   7        sejarah     IPS    2B     76     89   82.5
8   8        sejarah     IPS    2C     87     98   92.5
9   9      akuntansi     IPS    1B     88     79   83.5
10 10      akuntansi     IPS    1C     95     75   85.0
11 11      akuntansi     IPS    2B     94     80   87.0
12 12      akuntansi     IPS    2C     91     97   94.0

Operasi Mutate dengan Syarat Kondisi If-else

Terasa kurang lengkap jika hanya menambahkan operasi mutate() sekalian ditampilkan kolom keterangan yang memberikan informasi kelulusan jika nilai reratanya diatas 80

keterangan <-mutate(rerata_nilai,keterangan=ifelse(rerata>=80,'lulus','tidak lulus'))
print(keterangan)

hasil

   no mata_pelajaran jurusan kelas nilai1 nilai2 rerata  keterangan
1   1        sejarah     IPA    1A     89     87   88.0       lulus
2   2        sejarah     IPA    2A     96     90   93.0       lulus
3   3     matematika     IPA    1A     80     81   80.5       lulus
4   4     matematika     IPA    2A     79     78   78.5 tidak lulus
5   5        sejarah     IPS    1B     77     78   77.5 tidak lulus
6   6        sejarah     IPS    1C     78     77   77.5 tidak lulus
7   7        sejarah     IPS    2B     76     89   82.5       lulus
8   8        sejarah     IPS    2C     87     98   92.5       lulus
9   9      akuntansi     IPS    1B     88     79   83.5       lulus
10 10      akuntansi     IPS    1C     95     75   85.0       lulus
11 11      akuntansi     IPS    2B     94     80   87.0       lulus
12 12      akuntansi     IPS    2C     91     97   94.0       lulus

Ataupun kalian juga bisa membuat if-else berkalang untuk menghasilkan nilai passing grade, misalkan passing grade mempunyai keterangan sebagai berikut

Seperti kode rumus yang ada di excel

grade<-mutate(rerata_nilai,grade=ifelse(rerata>=90,'A',
               ifelse(rerata>=85,'B',
               ifelse(rerata>=70,'C','D'))))
print(grade)

hasil

   no mata_pelajaran jurusan kelas nilai1 nilai2 rerata grade
1   1        sejarah     IPA    1A     89     87   88.0     B
2   2        sejarah     IPA    2A     96     90   93.0     A
3   3     matematika     IPA    1A     80     81   80.5     C
4   4     matematika     IPA    2A     79     78   78.5     C
5   5        sejarah     IPS    1B     77     78   77.5     C
6   6        sejarah     IPS    1C     78     77   77.5     C
7   7        sejarah     IPS    2B     76     89   82.5     C
8   8        sejarah     IPS    2C     87     98   92.5     A
9   9      akuntansi     IPS    1B     88     79   83.5     C
10 10      akuntansi     IPS    1C     95     75   85.0     B
11 11      akuntansi     IPS    2B     94     80   87.0     B
12 12      akuntansi     IPS    2C     91     97   94.0     A

Operasi Piping

Yaitu menggabungkan beberapa operasi menjadi satu dengan perintah %>%, misalkan operasi select dan filtering

nilai_IPA<-uas %>% select(c(mata_pelajaran,jurusan,kelas,nilai1)) %>% filter(jurusan=='IPA')
print(nilai_IPA)

hasil

  mata_pelajaran jurusan kelas nilai1
1        sejarah     IPA    1A     89
2        sejarah     IPA    2A     96
3     matematika     IPA    1A     80
4     matematika     IPA    2A     79

Operasi piping merupakan salah satu keunggulan di R sehingga mempersingkat kode dan lebih rapi tentunya. Kebanyakan operasi piping akan banyak melibatkan beberapa operasi menjadi satu

Operasi Group_by

Contoh lain menggunakan operasi piping yaitu dengan melibatkan operasi group_by. Misalkan untuk mengetahui nilai tertinggi di masing-masing pelajaran, maka kalian harus menggunakan operasi group by.

nilai_tertinggi_mp<- uas %>% select(c(no,mata_pelajaran,jurusan,kelas,nilai1)) %>% group_by(mata_pelajaran) %>% filter(nilai==max(nilai))
print(nilai_tertinggi_mp)

hasil

     no mata_pelajaran jurusan kelas nilai1
  <int> <fct>          <fct>   <fct> <int>
1     2 sejarah        IPA     2A       96
2     3 matematika     IPA     1A       80
3    10 akuntansi      IPS     1C       95

Ada 3 mata pelajaran dengan masing-masing tertinggi seperti diatas, ternyata nilai sejarah tertinggi diraih oleh jurusan IPA pada kelas 2A. Atau kalian ingin tahu nilai tertinggi oleh masing-masing jurusan.

nilai_tertinggi_jurusan<- uas %>% select(c(no,mata_pelajaran,jurusan,kelas,nilai1)) %>% group_by(jurusan) %>% filter(nilai1==max(nilai1))
print(nilai_tertinggi_jurusan)

hasil

     no mata_pelajaran jurusan kelas nilai1
  <int> <fct>          <fct>   <fct> <int>
1     2 sejarah        IPA     2A       96
2    10 akuntansi      IPS     1C       95

Empty Data Frame dan Add row

Terkadang kita butuh membuat tabel kosong yang berisi hanya nama kolom, karena nanti ada add_row

data = data.frame(no=double(),nama=character())

data = data%>%add_row(no=1,nama='bejo')
data = data%>%add_row(no=2,nama='bintang')
data

Menghapus baris / remove /delete row

Untuk menghapus baris, caranya cukup mudah, misalkan untuk data diatas akan dihapus baris ke 2

data = data[-2,]

 

 

You May Have Missed