Objek di R

Vector

Ilustrasi Data Vector

Vektor merupakan kombinasi berbagai nilai (numerik, karakter dan sebagainya berdasarkan jenis input data) pada objek yang sama, dengan kata lain satu nilai (elemen) atau lebih dapat digabungkan dan menjadi satu vektor. Ada berbagai cara membuat sebuah vektor di R.

Fungsi c()

Vektor dapat dibuat dengan fungsi c(). Setiap elemen nilai yang di input dalam fungsi c() dipisah menggunakan tanda koma (,). Contoh sederhana membuat vektor dalam bentuk numerik adalah sebagai berikut.

vektor1 = c(2,4,6,8)
vektor1
## [1] 2 4 6 8

Dapat dilihat vektor1 memuat nilai numerik yaitu 2,4,6,8. Bentuk lain vektor adalah vektor karakter yang dapat dibuat dengan fungsi yang sama yaitu :

vektor2 = c("tas", "sepatu", "kaca mata")
vektor2
## [1] "tas"       "sepatu"    "kaca mata"

vektor2 merupakan vektor bentuk karakter, dalam contoh ini berupa nama-nama barang.

Fungsi Replicate

Fungsi replicate() di gunakan untuk membuat vektor dengan mengulang - ulang nilai yang diinginkan. Dengan menggunakan fungsi ini, isi elemen nilai dari vektor dapat diulang sebanyak n kali sesuai perintah yang ada, seperti contoh di bawah ini.

rep(17,3)
## [1] 17 17 17

Dapat dilihat contoh fungsi replicate() di atas, di lakukan pengulangan angka 17 sebanyak 3 kali. Contoh lain jika ingin melakukan pengulangan dengan angka yang memiliki range tertentu, dapat menggunakan syntaks di bawah ini.

rep(17:21,2)
##  [1] 17 18 19 20 21 17 18 19 20 21

Hasil yang di dapatkan adalah pengulangan sebanyak 2 kali dengan range nilai dari 17 sampai 21. Jika ingin melakukan pengulangan dengan range dan angka pengulangannya secara berurut, dapat digunakan syntaks sebagai berikut.

rep(17:21,each =2)
##  [1] 17 17 18 18 19 19 20 20 21 21

Hasil yang di dapatkan adalah pengulangan sebanyak 2 kali secara berurut dengan data range 17 sampai 21. Jika ingin melakukan pengulangan dengan range tertentu, angka pengulangannya secara berurut dan hasil tersebut di ulang sebanyak n kali, dapat menggunakan syntaks sebagai berikut.

rep(17:21 ,times=2 ,each =2)
##  [1] 17 17 18 18 19 19 20 20 21 21 17 17 18 18 19 19 20 20 21 21

Pengolahan Data Vector

Fungsi nchar()

Fungsi nchar() digunakan untuk menghitung jumlah karakter dalam vektor. Contoh penerapannya adalah sebagai berikut.

a1 = c("Yasinta Amalia Sanudin")
n1 = nchar(a1)
n1
## [1] 22

Fungsi substr()

Fungsi substr() digunakan untuk mengambil data ke-i sebanyak n data. Syntaks yang dapat digunakan adalah sebagai berikut.

a2 <- substr(a1,3,5) 
a2
## [1] "sin"

Fungsi substring()

Fungsi substring() digunakan untuk mengambil data dari karakter ke-i hingga data setelahnya.

a3 <- substring(a1,13) 
a3
## [1] "ia Sanudin"

Factor

Factor merupakan bentuk yang lebih luas dari vektor. Biasanya factor digunakan untuk menyimpan data ordinal atau nominal. Contoh penerapan fungsi factor() adalah sebagai berikut.

k = factor (c(1,0,1,0,0,0), levels=c(0,1), labels =c("Female","Male"))
k
## [1] Male   Female Male   Female Female Female
## Levels: Female Male

Dapat di lihat, tampilan dari isi data Female dan Male dari factor adalah pengkodean numerik. Female dengan nilai sebenarnya 0 dan Male nilai sebenarnya adalah 1.

Matriks

Ilustrasi Data Matriks

Matriks adalah objek di R yang terdiri dari 2 dimensi yaitu baris (row) dan kolom (column). Untuk membuat suatu matriks, dapat digunakan fungsi matriks() yang memiliki argumen nrow yaitu untuk menentukan ukuran baris matriks dan ncol untuk menentukan ukuran kolom matriks. Argumen nrow dan ncol bisa digunakan keduanya atau hanya salah satu saja.

Sebagai contoh, misalnya kita memiliki sebuah vektor numerik yang memiliki 9 elemen nilai sebagai berikut.

data1 = c(1,3,5,7,9,2,3,4,5)
data1
## [1] 1 3 5 7 9 2 3 4 5

Kemudian dari vektor yang ada, kita akan membentuk satu matriks 3 x 3, dapat digunakan syntaks sebagai berikut.

matriks1 = matrix(data = data1, nrow = 3)
matriks1
##      [,1] [,2] [,3]
## [1,]    1    7    3
## [2,]    3    9    4
## [3,]    5    2    5

Ketika nrow = 3 maka secara otomatis ncol = 3. Dalam studi kasus lain, matriks juga dapat dibuat dengan jumlah baris dan kolom yang berbeda, dengan contoh sebagai berikut.

matriks2 = matrix(data = data1, nrow = 2, ncol = 3)
## Warning in matrix(data = data1, nrow = 2, ncol = 3): data length [9] is not a
## sub-multiple or multiple of the number of rows [2]
matriks2
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    3    7    2
Fungsi rbind() dan cbind()

Fungsi rbind() digunakan untuk menggabungkan vektor menjadi 1 matriks dengan outputnya dalam bentuk baris.

Fungsi cbind()digunakan untuk menggabungkan vektor menjadi 1 matriks dengan outputnya dalam bentuk kolom.

Misalnya terdapat 2 vektor yaitu data2 dan data3, kemudian dibuat 1 matriks untuk menggabungkan data tersebut dengan output datanya dalam bentuk kolom, syntaks yang di gunakan adalah sebagai berikut.

data2 = c(1:5)
data3 = c(6:10)
matriks3 = cbind(data2,data3) 
matriks3
##      data2 data3
## [1,]     1     6
## [2,]     2     7
## [3,]     3     8
## [4,]     4     9
## [5,]     5    10

Untuk menggabungkan data2 dan data3 dengan output datanya dalam bentuk baris, syntaks yang di gunakan adalah sebagai berikut.

matriks4 = rbind(data2,data3)
matriks4
##       [,1] [,2] [,3] [,4] [,5]
## data2    1    2    3    4    5
## data3    6    7    8    9   10

Perhitungan dengan Matriks

Fungsi t() digunakan untuk melakukan transpose pada matriks. Syntaks yang digunakan adalah sebagai berikut.

t(matriks4)
##      data2 data3
## [1,]     1     6
## [2,]     2     7
## [3,]     3     8
## [4,]     4     9
## [5,]     5    10

Fungsi %*% digunakan untuk melakukan perkalian pada matriks. Syntaks yang digunakan adalah sebagai berikut.

mat1 <- matrix(1:6,2,3)
mat1
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
mat2 <- matrix(1:6,3,2,byrow=T)
mat2
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
mat3 <- mat1 %*% mat2
mat3
##      [,1] [,2]
## [1,]   35   44
## [2,]   44   56

Fungsi solve() digunakan untuk melakukan invers pada matriks. Syntaks yang digunakan adalah sebagai berikut.

invrs <- solve(mat3) 
invrs
##           [,1]      [,2]
## [1,]  2.333333 -1.833333
## [2,] -1.833333  1.458333

Fungsi eigen() digunakan untuk menghitung nilai eigen dan vektor eigen suatu matriks. Syntaks yang digunakan adalah sebagai berikut.

e = eigen(mat3) 
e
## eigen() decomposition
## $values
## [1] 90.7354949  0.2645051
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.6196295 -0.7848945
## [2,] 0.7848945  0.6196295

List

Ilustrasi Data List

Objek list() mirip seperti vektor namun elemen nilai pada objek ini bisa berbeda. Pada objek ini elemennya dapat berupa vektor, matriks, array, data frame dan objek lainnya yang di buat dalam R. Penggunakan objek ini adalah sebagai berikut.

sampelist = list(2, c("mawar","melati"), c(2,3,4), matriks4)
sampelist
## [[1]]
## [1] 2
## 
## [[2]]
## [1] "mawar"  "melati"
## 
## [[3]]
## [1] 2 3 4
## 
## [[4]]
##       [,1] [,2] [,3] [,4] [,5]
## data2    1    2    3    4    5
## data3    6    7    8    9   10

Dapat dilihat, elemen dari objek list di atas berisi vektor numerik, vector karakter, dan matriks.

Array

Ilustrasi Array

Array merupakan objek seperti matriks dengan dimensi yang lebih banyak. Array memiliki 2 dimensi atau lebih. Fungsi di R untuk array adalah array(). Misalkan akan di buat suatu array 3 dimensi berisi 2 lapis matriks masing-masing berukuran 3 baris dan 2 kolom, dapat menggunakan syntaks sebagai berikut.

array1 <- array(1:12, dim=c(3,2,2))
array1
## , , 1
## 
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    7   10
## [2,]    8   11
## [3,]    9   12

Untuk mengakses array dapat dilakukan dengan syntaks sebagai berikut

array1[,1,]
##      [,1] [,2]
## [1,]    1    7
## [2,]    2    8
## [3,]    3    9

Hasil di atas berarti mengakses kolom pertama pada array1

array1[,1,1]
## [1] 1 2 3

Hasil di atas berarti mengakses kolom pertama dan baris pertama pada array1

Data Frame

Ilustrasi Data Frame (Tabel)

Data frame adalah tabel yang terdiri dari kolom dan baris. Pada sebuah data frame dapat terdiri dari kolom yang memiliki tipe data yang berbeda-beda.

Misalkan terdapat studi kasus membuat data frame data nilai mahasiswa yang terdiri dari id mahasiswa id_mhw, nilai statistika stat, nilai matematika math, pengelompokkan nilai segment dan jenis kelamin gender.

Untuk membuat id_mhw dapat digunakan 2 cara yaitu dengan fungsi paste() dan paste0() dengan syntaks sebagai berikut.

#cara 1
id_mhw = paste("id", rep(1:10), sep="")
id_mhw
##  [1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"
# cara 2
id_mhw2 = paste0("id", 1:10) 
id_mhw2
##  [1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"

Setelah id_mhw di buat, dilanjutkan dengan menginput data stat, math, segment, gender masing-masing dibuat dalam bentuk vektor.

stat = c(86,87,90,91,92,78,98,77,89,80)
stat
##  [1] 86 87 90 91 92 78 98 77 89 80
math = c(79,92,87,87,90,79,92,80,85,82)
math
##  [1] 79 92 87 87 90 79 92 80 85 82
segment = c('high','low','low','high','med','med','low','high','med','low')
segment
##  [1] "high" "low"  "low"  "high" "med"  "med"  "low"  "high" "med"  "low"
gender = c('F','F','M','M','F','M','M','F','F','M')
gender
##  [1] "F" "F" "M" "M" "F" "M" "M" "F" "F" "M"

Kemudian untuk menggabungkan data yang ada dan menjadikan data tersebut menjadi 1 tabel, digunakan fungsi data.frame() dengan syntaks sebagai berikut.

data = data.frame(id_mhw, stat, math, segment, gender)
data
##    id_mhw stat math segment gender
## 1     id1   86   79    high      F
## 2     id2   87   92     low      F
## 3     id3   90   87     low      M
## 4     id4   91   87    high      M
## 5     id5   92   90     med      F
## 6     id6   78   79     med      M
## 7     id7   98   92     low      M
## 8     id8   77   80    high      F
## 9     id9   89   85     med      F
## 10   id10   80   82     low      M

Membuat variabel/kolom baru

Untuk membuat atau menambahkan kolom baru dalam data frame, dapat menggunakan beberapa fungsi yaitu dengan contoh syntaks sebagai berikut.

Fungsi $

#cara 1
data$paralel = factor(rep(1:2,5))
data
##    id_mhw stat math segment gender paralel
## 1     id1   86   79    high      F       1
## 2     id2   87   92     low      F       2
## 3     id3   90   87     low      M       1
## 4     id4   91   87    high      M       2
## 5     id5   92   90     med      F       1
## 6     id6   78   79     med      M       2
## 7     id7   98   92     low      M       1
## 8     id8   77   80    high      F       2
## 9     id9   89   85     med      F       1
## 10   id10   80   82     low      M       2

Fungsi [, ]

#cara 2
cara_2 = data
cara_2[,'pararel1'] <- factor(rep(1:2,5))
cara_2
##    id_mhw stat math segment gender paralel pararel1
## 1     id1   86   79    high      F       1        1
## 2     id2   87   92     low      F       2        2
## 3     id3   90   87     low      M       1        1
## 4     id4   91   87    high      M       2        2
## 5     id5   92   90     med      F       1        1
## 6     id6   78   79     med      M       2        2
## 7     id7   98   92     low      M       1        1
## 8     id8   77   80    high      F       2        2
## 9     id9   89   85     med      F       1        1
## 10   id10   80   82     low      M       2        2

Fungsi mutate

Untuk menggunakan fungsi mutate terlebih dahulu harus mengaktifkan packages dplyr dengan syntaks sebagai berikut.

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#cara 3
cara3 = data %>% mutate('pararel3' = factor(rep(1:2,5)))
cara3
##    id_mhw stat math segment gender paralel pararel3
## 1     id1   86   79    high      F       1        1
## 2     id2   87   92     low      F       2        2
## 3     id3   90   87     low      M       1        1
## 4     id4   91   87    high      M       2        2
## 5     id5   92   90     med      F       1        1
## 6     id6   78   79     med      M       2        2
## 7     id7   98   92     low      M       1        1
## 8     id8   77   80    high      F       2        2
## 9     id9   89   85     med      F       1        1
## 10   id10   80   82     low      M       2        2

Menambah baris baru

Untuk menambah baris baru dalam data frame dapat digunakan syntaks sebagai berikut.

data[nrow(data) + 1,] = c("id11","78", "89", "low", "F", "2") 
data
##    id_mhw stat math segment gender paralel
## 1     id1   86   79    high      F       1
## 2     id2   87   92     low      F       2
## 3     id3   90   87     low      M       1
## 4     id4   91   87    high      M       2
## 5     id5   92   90     med      F       1
## 6     id6   78   79     med      M       2
## 7     id7   98   92     low      M       1
## 8     id8   77   80    high      F       2
## 9     id9   89   85     med      F       1
## 10   id10   80   82     low      M       2
## 11   id11   78   89     low      F       2

Data Wrangling

Secara umum wrangling data adalah proses transformasi data mentah ke dalam format yang lebih rapih. Wrangling data adalah proses cleaning data menjadi data bersih yang siap digunakan untuk analisis dan uji coba. Dalam bahasan ini, data yang digunakan dalam proses wrangling data adalah data frame nilai mahasiswa yang telah di definisikan sebelumnya.

Subsetting Data

Operator ==

Operator ini digunakan saat kondisi data yang ada sama dengan (=) nilai yang di cari. Ketika ingin memanggil data yang hanya dari kelas paralel 1, syntaks yang digunakan adalah sebagai berikut.

indeks1 = data$paralel == 1
data1 = data[indeks1,]
data1
##   id_mhw stat math segment gender paralel
## 1    id1   86   79    high      F       1
## 3    id3   90   87     low      M       1
## 5    id5   92   90     med      F       1
## 7    id7   98   92     low      M       1
## 9    id9   89   85     med      F       1

Maka data yang akan muncul adalah data mahasiswa yang berasal dari paralel 1.

Operator == |

Operator ini adalah operator sama dengan dan atau, dimana terdapat kasus ketika ingin mencari nilai dengan 2 kondisi tertentu. Jika ingin memanggil data mahasiswa yang nilai stat = 90 atau nilai math = 90 dapat menggunakan syntaks sebagai berikut.

indeks2 = data$stat == 90 | data$math == 90
data2 = data[indeks2,]
data2
##   id_mhw stat math segment gender paralel
## 3    id3   90   87     low      M       1
## 5    id5   92   90     med      F       1

Maka data yang akan muncul adalah data mahasiswa yang memiliki nilai stat = 90 atau mahasiswa yang memiliki nilai math = 90.

Operator !=

Operator != berarti operator tidak sama dengan, dimana nilai yang akan di ambil tidak sama dengan kondisi yang di tuliskan. Seperti contoh syntak di bawah ini.

indeks3 = data$paralel != 2
data3 = data[indeks3,]
data3
##   id_mhw stat math segment gender paralel
## 1    id1   86   79    high      F       1
## 3    id3   90   87     low      M       1
## 5    id5   92   90     med      F       1
## 7    id7   98   92     low      M       1
## 9    id9   89   85     med      F       1

Dalam tabel hanya terdapat 2 paralel yaitu paralel 1 dan paralel 2, sehingga ketika di tuliskan kondisi != 2 maka data yang akan muncul adalah data mahasiswa yang berasal paralel selain paralel 2 (dalam kasus ini paralel1).

Operator >=, <=

Operator >= berarti mencari nilai yang lebih dari dan sama dengan kondisi yang ada

Operator <= berarti mencari nilai yang kurang dari dan sama dengan kondisi yang ada

Contoh penggunaan fungsi ini adalah sebagai berikut.

indeks4 = data$stat >= 80 & data$stat <= 90
data4 = data[indeks4,]
data4
##    id_mhw stat math segment gender paralel
## 1     id1   86   79    high      F       1
## 2     id2   87   92     low      F       2
## 3     id3   90   87     low      M       1
## 9     id9   89   85     med      F       1
## 10   id10   80   82     low      M       2

Data yang akan muncul adalah data mahasiswa yang memiliki nilai math >= 80 dan mahasiswa yang memiliki nilai stat <= 90.

Operator %in%

Operator ini digunakan untuk mengidentifikasi elemen pada vektor atau bisa juga digunakan untuk membandingakan elemen dari vektor yang ada. Acuan pembanding terdapat pada data pertama atau data sebelah kiri dari operator %in%, dengan contoh sebagai berikut.

x1 = 1:5
x1
## [1] 1 2 3 4 5
x2 = 1:3
x2
## [1] 1 2 3
x1 %in% x2
## [1]  TRUE  TRUE  TRUE FALSE FALSE

Dapat dilihat ketika x1 di compare dengan x2, maka untuk data yang bernilai sama akan bernilai TRUE dan sisanya adalah FALSE. Penggunaan operator ini dalam data frame adalah sebagai berikut.

indeks5 = data$stat %in% c(80,85,90,95)
indeks5
##  [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
data5 = data[indeks5,]
data5
##    id_mhw stat math segment gender paralel
## 3     id3   90   87     low      M       1
## 10   id10   80   82     low      M       2

Data yang di tampilkan adalah data yang bernilai TRUE sesuai dengan kondisi yaitu mahasiswa yang memiliki nilai stat di antara nilai 80,85,90,95.

Operator duplicated

Operator ini digunakan untuk memeriksa apakah terdapat data yang sama (data double atau lebih) dalam sebuah tabel. Biasanya operator ini di gunakan untuk memriksa kolom yang isi datanya unique. Dalam kasus ini, operator duplicate digunakan untuk memeriksa kolom id_mhw.

indeks6 = duplicated(data$id_mhw)
data6 = data[indeks6,]
data6
## [1] id_mhw  stat    math    segment gender  paralel
## <0 rows> (or 0-length row.names)

Hasil yang ada, tidak terdapat id_mhw yang sama dalam tabel.

Operator is.na

Operator ini digunakan untuk memeriksa apakah terdapat data yang kosong dalam suatu kolom. Jika ingin memeriksa data kosong pada kolom paralel dapat digunakan syntaks sebagai berikut.

indeks7 = is.na(data$paralel) #cek data kosong di paralel
data7 = data[indeks7,]
data7
## [1] id_mhw  stat    math    segment gender  paralel
## <0 rows> (or 0-length row.names)

Hasil yang ada, tidak terdapat data kosong pada kolom paralel.

Mengurutkan Data

Order

Fungsi order() digunakan untuk mengurutkan data berdasarkan kondisi tertentu. Ketika ingin mengurutkan data berdasarkan nilai stat terkecil, syntaks yang digunakan adalah sebagai berikut.

data[order(data$stat),]
##    id_mhw stat math segment gender paralel
## 8     id8   77   80    high      F       2
## 6     id6   78   79     med      M       2
## 11   id11   78   89     low      F       2
## 10   id10   80   82     low      M       2
## 1     id1   86   79    high      F       1
## 2     id2   87   92     low      F       2
## 9     id9   89   85     med      F       1
## 3     id3   90   87     low      M       1
## 4     id4   91   87    high      M       2
## 5     id5   92   90     med      F       1
## 7     id7   98   92     low      M       1

Rank

Fungsi rank digunakan untuk menetapkan nomor unik ke setiap baris yang berbeda berdasarkan rank nilai terkecil. Jika terdapat 2 data yang sama maka data urutan ke-n dan data ke n+1 akan di jumlahkan dan di bagi 2. Sebagai contoh dapat dilihat ketika mencari nilai rank untuk kolom stat, dengan syntaks sebagai berikut.

data$rank = rank(data$stat)
data[order(data$rank),]
##    id_mhw stat math segment gender paralel rank
## 8     id8   77   80    high      F       2  1.0
## 6     id6   78   79     med      M       2  2.5
## 11   id11   78   89     low      F       2  2.5
## 10   id10   80   82     low      M       2  4.0
## 1     id1   86   79    high      F       1  5.0
## 2     id2   87   92     low      F       2  6.0
## 9     id9   89   85     med      F       1  7.0
## 3     id3   90   87     low      M       1  8.0
## 4     id4   91   87    high      M       2  9.0
## 5     id5   92   90     med      F       1 10.0
## 7     id7   98   92     low      M       1 11.0

Nilai rank pada data urutan ke 2 dan ke 3 adalah 2.5, nilai rank ini di dapat dari nilai \(((2+3)/2)\). Perhitungan ini dilakukan karena nilai stat pada kedua urutan sama yaitu 78. Selanjutnya di urutan ke 4 langsung menghasilkan rank = 4 , dan tidak ada penulisan rank = 3 karena telah di lakukan pembagian antara urutan ke 2 dan ke 3.

Sort

Fungsi sort di gunakan untuk mengurutkan data. Syntaks yang digunakan adalah sebagai berikut.

sort(data$stat)
##  [1] "77" "78" "78" "80" "86" "87" "89" "90" "91" "92" "98"

Dapat dilihat dari hasil yang ada, pengurutan data nilai stat pada tabel dari yang terkecil hingga nilai terbesar.

Which

Fungsi which akan mengembalikan fungsi elemen dalam vektor logis yang TRUE. Contoh dari fungsi ini adalah sebagai berikut.

which(data$stat==80)
## [1] 10
data[which(data$stat==80),]
##    id_mhw stat math segment gender paralel rank
## 10   id10   80   82     low      M       2    4

Rev

Fungsi rev digunakan untuk mengurutkan data secara terbalik (atau dari nilai paling bawah ke paling atas). Dalam kasus ini untuk mengurutkan secara terbalik id_mhw , syntaks yang digunakan adalah sebagai berikut.

rev(data$id_mhw) 
##  [1] "id11" "id10" "id9"  "id8"  "id7"  "id6"  "id5"  "id4"  "id3"  "id2" 
## [11] "id1"

Unique

Fungsi unique adalah menampilkan data unique yang ada, ketika terdapat 2 data yang sama maka dengan fungsi ini hanya akan menampilkan 1 data saja. Syntaks yang digunakan adalah sebagai berikut.

unique(data$id_mhw)
##  [1] "id1"  "id2"  "id3"  "id4"  "id5"  "id6"  "id7"  "id8"  "id9"  "id10"
## [11] "id11"

Recording Data

Recoding data digunakan untuk memodifikasi variabel dan membuat variabel baru dalam data frame. Dalam penerapannya, recoding data dilakukan untuk membuat kode atau mengkode ulang data dalam bentuk yang berbeda. Beberapa cara untuk recoding data adalah sebagai berikut.

Logical

Logical bisa di sebut juga dengan recode berdasarkan perhitungan menggunakan logika atau manual. Misalkan ingin mengkode data mahasiswa yang memiliki nilai stat lebih dari 85 dengan kode 1 dan kurang dari 85 dengan kode 0, maka syntak syang digunakan adalah sebagai berikut.

data$code1 = 1*(data$stat>=85) + 0*(data$stat<85)
data
##    id_mhw stat math segment gender paralel rank code1
## 1     id1   86   79    high      F       1  5.0     1
## 2     id2   87   92     low      F       2  6.0     1
## 3     id3   90   87     low      M       1  8.0     1
## 4     id4   91   87    high      M       2  9.0     1
## 5     id5   92   90     med      F       1 10.0     1
## 6     id6   78   79     med      M       2  2.5     0
## 7     id7   98   92     low      M       1 11.0     1
## 8     id8   77   80    high      F       2  1.0     0
## 9     id9   89   85     med      F       1  7.0     1
## 10   id10   80   82     low      M       2  4.0     0
## 11   id11   78   89     low      F       2  2.5     0

Ifelse

Fungsi ifelse digunakan untuk mengkode ulang dengan 2 kondisi. Misalkan ingin mengkode data mahasiswa yang memiliki nilai stat lebih dari 85 dengan kode GOOD dan di luar dari kondisi itu dengan kode NOT BAD. Syntaks yang digunakan adalah sebagai berikut.

data$code2 = ifelse(data$stat>85,"GOOD","NOT BAD")
data
##    id_mhw stat math segment gender paralel rank code1   code2
## 1     id1   86   79    high      F       1  5.0     1    GOOD
## 2     id2   87   92     low      F       2  6.0     1    GOOD
## 3     id3   90   87     low      M       1  8.0     1    GOOD
## 4     id4   91   87    high      M       2  9.0     1    GOOD
## 5     id5   92   90     med      F       1 10.0     1    GOOD
## 6     id6   78   79     med      M       2  2.5     0 NOT BAD
## 7     id7   98   92     low      M       1 11.0     1    GOOD
## 8     id8   77   80    high      F       2  1.0     0 NOT BAD
## 9     id9   89   85     med      F       1  7.0     1    GOOD
## 10   id10   80   82     low      M       2  4.0     0 NOT BAD
## 11   id11   78   89     low      F       2  2.5     0 NOT BAD

Switch

Dalam recoding data, fungsi switch digunakan untuk mengkode ulang dengan memilih operasi yang akan di lakukan. Ketika ingin mengkode M menjadi Màle dan F menjadi Female. Dapat menggunakan fungsi switch dan melakukan perulangan dengan fungsi for, dengan syntaks sebagai berikut.

new_gender = matrix(nrow=length(data$gender),ncol=1)
for (i in 1:nrow(data)){
  x = data[i,'gender']
  new_gender[i] <- switch(x,"M" = "Male","F" = "Female")
}
data$switch_gender = new_gender
data
##    id_mhw stat math segment gender paralel rank code1   code2 switch_gender
## 1     id1   86   79    high      F       1  5.0     1    GOOD        Female
## 2     id2   87   92     low      F       2  6.0     1    GOOD        Female
## 3     id3   90   87     low      M       1  8.0     1    GOOD          Male
## 4     id4   91   87    high      M       2  9.0     1    GOOD          Male
## 5     id5   92   90     med      F       1 10.0     1    GOOD        Female
## 6     id6   78   79     med      M       2  2.5     0 NOT BAD          Male
## 7     id7   98   92     low      M       1 11.0     1    GOOD          Male
## 8     id8   77   80    high      F       2  1.0     0 NOT BAD        Female
## 9     id9   89   85     med      F       1  7.0     1    GOOD        Female
## 10   id10   80   82     low      M       2  4.0     0 NOT BAD          Male
## 11   id11   78   89     low      F       2  2.5     0 NOT BAD        Female

Recode

Fungsi recode digunakan untuk melakukan pengkodean ulang pada data. Untuk menggunakan fungsi ini, terlebih dahulu mengaktifkan packages tidyverse. Dalam contoh kasus ini, akan di lakukan pengkodean ulang untuk data di kolom code2 dengan kondisi GOOD = 1 dan NOT BAD = 0. Syntaks yang digunakan adalah sebagai berikut.

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.1
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.2     v stringr 1.4.0
## v tidyr   1.1.3     v forcats 0.5.1
## v readr   1.4.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
data$code4 <- recode_factor(data$code2, 'GOOD' = 1, 'NOT BAD' =  0)
data
##    id_mhw stat math segment gender paralel rank code1   code2 switch_gender
## 1     id1   86   79    high      F       1  5.0     1    GOOD        Female
## 2     id2   87   92     low      F       2  6.0     1    GOOD        Female
## 3     id3   90   87     low      M       1  8.0     1    GOOD          Male
## 4     id4   91   87    high      M       2  9.0     1    GOOD          Male
## 5     id5   92   90     med      F       1 10.0     1    GOOD        Female
## 6     id6   78   79     med      M       2  2.5     0 NOT BAD          Male
## 7     id7   98   92     low      M       1 11.0     1    GOOD          Male
## 8     id8   77   80    high      F       2  1.0     0 NOT BAD        Female
## 9     id9   89   85     med      F       1  7.0     1    GOOD        Female
## 10   id10   80   82     low      M       2  4.0     0 NOT BAD          Male
## 11   id11   78   89     low      F       2  2.5     0 NOT BAD        Female
##    code4
## 1      1
## 2      1
## 3      1
## 4      1
## 5      1
## 6      0
## 7      1
## 8      0
## 9      1
## 10     0
## 11     0

Case When

Fungsi case_when digunakan untuk mengkode ulang dalam kondisi tertentu. Dalam kasus ini, jika data stat lebih dari 78 dinyatakan dengan kode LULUS dan jika diluar dari kondisi tersebut dinyatakan TIDAK LULUS. Syntaks yang digunakan adalah sebagai berikut.

data$case_when <- case_when((data$stat > 78) ~ "LULUS",TRUE ~ "TIDAK LULUS") 
data
##    id_mhw stat math segment gender paralel rank code1   code2 switch_gender
## 1     id1   86   79    high      F       1  5.0     1    GOOD        Female
## 2     id2   87   92     low      F       2  6.0     1    GOOD        Female
## 3     id3   90   87     low      M       1  8.0     1    GOOD          Male
## 4     id4   91   87    high      M       2  9.0     1    GOOD          Male
## 5     id5   92   90     med      F       1 10.0     1    GOOD        Female
## 6     id6   78   79     med      M       2  2.5     0 NOT BAD          Male
## 7     id7   98   92     low      M       1 11.0     1    GOOD          Male
## 8     id8   77   80    high      F       2  1.0     0 NOT BAD        Female
## 9     id9   89   85     med      F       1  7.0     1    GOOD        Female
## 10   id10   80   82     low      M       2  4.0     0 NOT BAD          Male
## 11   id11   78   89     low      F       2  2.5     0 NOT BAD        Female
##    code4   case_when
## 1      1       LULUS
## 2      1       LULUS
## 3      1       LULUS
## 4      1       LULUS
## 5      1       LULUS
## 6      0 TIDAK LULUS
## 7      1       LULUS
## 8      0 TIDAK LULUS
## 9      1       LULUS
## 10     0       LULUS
## 11     0 TIDAK LULUS

Merging Data

Merging data adalah proses menggabungkan data. Dalam kasus ini merging data adalah proses menggabungkan dua tabel atau lebih menjadi 1 tabel yang sama. Umumnya terdapat 4 konsep merging data di R, yaitu sebagai berikut.

Join Tabel

Join tabel adalah penggabungan tabel yang dilakukan melalui kolom atau key tertentu yang memiliki nilai terkait untuk mendapatkan 1 set data dengan infromasi yang lengkap. Dalam melakukan join tabel, fungsi yang digunakan adalah fungsi merge(). Dalam kasus ini, misalkan terdapat 2 tabel dalam database customer. Tabel tersebut adalah tabel product (orderan product customer) dan tabel asal daerah customer. Tabel yang ada adalah sebagai berikut.

#tabel product
id_cust = paste("ID", rep(122:128), sep="")
product = paste("barang",12:18,sep=" ")
tabel_product = data.frame(id_cust, product)
tabel_product
##   id_cust   product
## 1   ID122 barang 12
## 2   ID123 barang 13
## 3   ID124 barang 14
## 4   ID125 barang 15
## 5   ID126 barang 16
## 6   ID127 barang 17
## 7   ID128 barang 18
#tabel daerah
id_cust = c("ID122", "ID126", "ID128", "ID129", "ID130", "ID133", "ID135")
asal = paste("Kota",1:7,sep="-")
tabel_daerah = data.frame(id_cust, asal)
tabel_daerah
##   id_cust   asal
## 1   ID122 Kota-1
## 2   ID126 Kota-2
## 3   ID128 Kota-3
## 4   ID129 Kota-4
## 5   ID130 Kota-5
## 6   ID133 Kota-6
## 7   ID135 Kota-7
Penjelasan dari 2 tabel di atas adalah sebagai berikut
  1. Tabel Product terdiri dari kolom id_cust dan product. Dalam kasus ini, tidak semua customer yang ada di tabel product, memiliki informasi mengenai asal daerah.
  2. Tabel Asal Daerah terdiri dari kolom id_cust dan asal Dalam kasus ini, tidak semua id_cust di tabel asal daerah memiliki informasi mengenai jenis product yang akan di order.

LEFT JOIN

Ilustrasi Left Join

Left Join adalah fungsi yang di gunakan untuk menggabungkan tabel x dan tabel y, dimana data yang di ambil adalah seluruh data di sebelah kiri (tabel x) dan data irisan tabel x dan tabel y yang memiliki key yang sama. Fungsi yang di gunakan adalah fungsi merge() dimana x adalah tabel product, y adalah tabel daerah, key yang digunakan untuk menghubungkan kedua tabel adalah id_cust, all.x = TRUE. Syntaks yang digunakan adalah sebagai berikut.

data8 = merge(x=tabel_product,y=tabel_daerah,by="id_cust",all.x=TRUE)
data8
##   id_cust   product   asal
## 1   ID122 barang 12 Kota-1
## 2   ID123 barang 13   <NA>
## 3   ID124 barang 14   <NA>
## 4   ID125 barang 15   <NA>
## 5   ID126 barang 16 Kota-2
## 6   ID127 barang 17   <NA>
## 7   ID128 barang 18 Kota-3

Dari hasil Left Join di atas, di dapatkan data gabungan dari data seluruh tabel product dan data irisan tabel produk dan asal daerah yang memiliki id_mhw yang sama. Nilai NA yang terlihat di kolom asal, berarti data yang ada (dengan key id_mhw) berasal dari tabel product (x) dan tidak terdapat di tabel asal daerah (y).

INNER JOIN

Ilustrasi Inner Join

Inner Join adalah fungsi yang di gunakan untuk menggabungkan tabel x dan tabel y, dimana data yang di ambil adalah data irisan tabel x dan tabel y yang memiliki key yang sama. Fungsi yang di gunakan adalah fungsi merge() dimana x adalah tabel product, y adalah tabel daerah, key yang digunakan untuk menghubungkan kedua tabel adalah id_cust, all = FALSE. Syntaks yang digunakan adalah sebagai berikut.

data9 = merge(x=tabel_product,y=tabel_daerah,by="id_cust", all=FALSE)
data9
##   id_cust   product   asal
## 1   ID122 barang 12 Kota-1
## 2   ID126 barang 16 Kota-2
## 3   ID128 barang 18 Kota-3

Dari hasil Inner Join di atas, di dapatkan data gabungan dari data tabel product dan data tabel asal daerah yang memiliki key (id_mhw) yang sama atau data yang beririsan di antara kedua tabel.

RIGHT JOIN

Right Join adalah fungsi yang di gunakan untuk menggabungkan tabel x dan tabel y, dimana data yang di ambil adalah seluruh data di sebelah kanan (tabel y) dan data irisan tabel x dan tabel y yang memiliki key yang sama. Fungsi yang di gunakan adalah fungsi merge() dimana x adalah tabel product, y adalah tabel daerah, key yang digunakan untuk menghubungkan kedua tabel adalah id_cust, all.y = TRUE. Syntaks yang digunakan adalah sebagai berikut.

Ilustrasi Right Join

data11 = merge(x=tabel_product,y=tabel_daerah,by="id_cust",all.y=TRUE)
data11
##   id_cust   product   asal
## 1   ID122 barang 12 Kota-1
## 2   ID126 barang 16 Kota-2
## 3   ID128 barang 18 Kota-3
## 4   ID129      <NA> Kota-4
## 5   ID130      <NA> Kota-5
## 6   ID133      <NA> Kota-6
## 7   ID135      <NA> Kota-7

Dari hasil Right Join di atas, di dapatkan data gabungan dari data seluruh tabel asal daerah dan data irisan tabel produk dan asal daerah yang memiliki id_mhw yang sama. Nilai NA yang terlihat di kolom product, berarti data yang ada (dengan key id_mhw) berasal dari tabel asal daerah (y) dan tidak terdapat di tabel produk (x).

OUTER JOIN

Ilustrasi Outer Join

Outer Join adalah fungsi kebalikan dari Inner Join, yang di gunakan untuk menggabungkan tabel x dan tabel y, dimana data yang di ambil adalah seluruh data di tabel x dan seluruh data di tabel y. Fungsi yang di gunakan adalah fungsi merge() dimana x adalah tabel product, y adalah tabel daerah, key yang digunakan untuk menghubungkan kedua tabel adalah id_cust, all = TRUE. Syntaks yang digunakan adalah sebagai berikut.

data12 = merge(x=tabel_product,y=tabel_daerah,by="id_cust",all=TRUE)
data12
##    id_cust   product   asal
## 1    ID122 barang 12 Kota-1
## 2    ID123 barang 13   <NA>
## 3    ID124 barang 14   <NA>
## 4    ID125 barang 15   <NA>
## 5    ID126 barang 16 Kota-2
## 6    ID127 barang 17   <NA>
## 7    ID128 barang 18 Kota-3
## 8    ID129      <NA> Kota-4
## 9    ID130      <NA> Kota-5
## 10   ID133      <NA> Kota-6
## 11   ID135      <NA> Kota-7

Dari hasil Outer Join di atas, di dapatkan data gabungan dari data seluruh tabel produk dan tabel asal daerah. Nilai NA yang terlihat di kolom product, berarti data yang ada (dengan key id_mhw) berasal dari tabel asal daerah (y) dan tidak terdapat di tabel produk (x). Nilai NA yang terlihat di kolom asal, berarti data yang ada (dengan key id_mhw) berasal dari tabel product (x) dan tidak terdapat di tabel asal daerah (y).

Reshaping

Reshaping data adalah mengubah cara data diatur ke dalam baris dan kolom, dengan kata lain reshaping berfungsi untuk mengubah format data frame. Reshaping data bisa dilakukan dalam bentuk data lebar ke panjang atau di sebut wide to long dan bentuk data panjang ke lebar atau di sebut long to wide. Dalam pengolahan data R, reshaping data dapat di lakukan dengan menggunakan fungsi reshape.

Dalam studi kasus ini, di ilustrasikan terdapat tabel data kota dengan jumlah masyarakat bekerja dan tidak bekerja. Dengan data sebagai berikut.

kota = c("Manado", "Jakarta", "Bandung")
bekerja = c("23400","56700","34500")
tidak_kerja = c("10000","30000","12000")
tabel = data.frame(kota, bekerja, tidak_kerja)
colnames(tabel)<- c("Nama Kota","Bekerja","Tidak Bekerja")
tabel
##   Nama Kota Bekerja Tidak Bekerja
## 1    Manado   23400         10000
## 2   Jakarta   56700         30000
## 3   Bandung   34500         12000

Dari tabel yang ada di atas (tabel berbentuk wide) akan dilakukan reshaping untuk mengubah format bentuk tabel.

Wide to Long

Fungsi wide to long adalah fungsi yang digunakan untuk mengubah format tabel lebar ke format tabel panjang. Seperti ilustrasi di bawah ini :

Ilustrasi Wide to Long

Fungsi yang digunakan adalah reshape dengan penjelasan argumennya sebagai berikut :
  • tabel = Tabel yang akan di ubah formatnya

  • idvar = Kolom kelas

  • varying = Objek list nama variabel dalam format wide

  • v.names = Objek vektor dari nama kolom baru dalam format long

  • times = Penamaan baris untuk kolom time berdasarkan varying

  • new.row.names = Jumlah row di format long

Dua argumen yang harus ada dalam wide to long adalah varying dan v.names.

#wide to long -> data frame diurutkan by varying (harus gunakan varying dan v.names) 
widetolong<- reshape(tabel,idvar="Nama Kota",
                     varying = c("Bekerja","Tidak Bekerja"),
                     v.name=c("value"),
                     times=c("Bekerja","Tidak Bekerja"),
                     new.row.names = 1:100,
                     direction="long")
widetolong
##   Nama Kota          time value
## 1    Manado       Bekerja 23400
## 2   Jakarta       Bekerja 56700
## 3   Bandung       Bekerja 34500
## 4    Manado Tidak Bekerja 10000
## 5   Jakarta Tidak Bekerja 30000
## 6   Bandung Tidak Bekerja 12000

Long to Wide

Fungsi long to wide adalah fungsi yang digunakan untuk mengubah format tabel panjang ke format tabel lebar. Seperti ilustrasi di bawah ini :

Ilustrasi Long to Wide

Fungsi yang digunakan adalah reshape dengan penjelasan argumennya sebagai berikut :
  • widetolong = Tabel yang akan di ubah formatnya

  • idvar = Kolom kelas yang memisahkan baris. Variabel baris yang menunjukkan nama yang sama

  • v.names = Kolom yang berisi nilai numerik

  • timevar = Variabel di kolom long untuk dijadikan variabel dalam format wide

Dua argumen yang harus ada dalam wide to long adalah idvar dan timevar.

# long to wide -> harus ada nama kolom buat idvar, v.names, timevar
longtowide <- reshape(widetolong, idvar="Nama Kota",
                      v.names = "value",
                      timevar = "time",
                      direction="wide")
longtowide
##   Nama Kota value.Bekerja value.Tidak Bekerja
## 1    Manado         23400               10000
## 2   Jakarta         56700               30000
## 3   Bandung         34500               12000