Muhammad Luqman 2018-04-05
RStudio terdiri dari beberapa bagian:
- Console
Merupakan tempat output dari code yang diketik pada bagian Script. Di bagian ini kita juga bisa langsung mengetik code secara langsung namun akan lebih sulit dilacak - Script
Merupakan tempat untuk menulis code. Untuk menjalankan (run) code yang sudah buat, pilih baris yang ingin dijalankan dan tekan Ctrl + Enter - Environtment
Merupakan tempat untuk melihat variabel yang sudah dibuat atau dataset yang digunakan - Output
Menampilkan output grafik apabila diperlukan atau dokumentasi dari suatu package
Untuk melihat keterangan dari suatu fungsi : ?<nama fungsi>
?mean
Untuk menginstall packages : install.packages(’<nama package>')
install.packages('caret')
Contoh operasi sederhana pada R
2 + 1
## [1] 3
6 / 3
## [1] 2
6 * 2
## [1] 12
6 ** 2
## [1] 36
6 ^ 2
## [1] 36
sqrt(81)
## [1] 9
(3 * 8) / (2 * 9)
## [1] 1.333333
log(exp(1))
## [1] 1
log(100, base = 10)
## [1] 2
log10(100)
## [1] 2
exp(2)
## [1] 7.389056
pi
## [1] 3.141593
2.5e+10
## [1] 2.5e+10
1 > 2
## [1] FALSE
!FALSE
## [1] TRUE
Variable digunakan untuk menyimpan hasil dari suatu operasi untuk kemudian digunakan lagi berikutnya. Hasil dari suatu variable dapat dilihat dengan menuliskan variable tersebut. Penamaan untuk variable dapat berupa alphabetic (misal var) atau alphanumeric (misal var10) namun tidak bisa apabila hanya berupa numeric.
a <- 10 #variasi assignment 1
b = 2 #variasi assignment 2
c = a + b
c
## [1] 12
Semua yang kita buat dalam R dapat diistilahkan sebagai sebuah object. Dalam R, setiap object dapat memiliki class seperti yang akan dicontohkan di bawah ini. Untuk mengetahui class dari suatu object gunakan fungsi class(). Untuk mengubah object dari suatu class ke class lain (yang mendukung konversi antar class), gunakan fungsi as.<nama class>
a = 'karakter'
b = 'baru'
c = paste(a, b)
c
## [1] "karakter baru"
class(c)
## [1] "character"
a = 10
b = '2'
class(b)
## [1] "character"
c = as.numeric(b) + a
c
## [1] 12
class(c)
## [1] "numeric"
a = 10
class(a)
## [1] "numeric"
a = 10.23
class(a)
## [1] "numeric"
a = 1 + 2i
class(a)
## [1] "complex"
a = TRUE
a
## [1] TRUE
class(a)
## [1] "logical"
a = 0
as.logical(a)
## [1] FALSE
as.logical(1)
## [1] TRUE
as.logical(99)
## [1] TRUE
R memiliki beberapa struktur data yang umum digunakan seperti yang akan dicontohkan di bawah ini
Vector merupakan struktur data yang paling sering digunakan dalam R. Vector merupakan kumpulan object yang memiliki class yang sama. Apabila Vector dibuat dari object dengan class yang berbeda, Vector yang ada akan mengkonversinya ke dalam bentuk yang paling sesuai untuk seluruh elemen Vector.
Membuat Vector dapat dilakukan dengan beberapa cara berikut
a = vector() #Vector kosong
a
## logical(0)
a = c(1,2,3) #Vector berisi object numeric
a
## [1] 1 2 3
a = 1:5
a
## [1] 1 2 3 4 5
is.vector(a)
## [1] TRUE
a = c("Time", 24, "October", TRUE, 3.33) #akan dikonversikan ke dalam class character
a
## [1] "Time" "24" "October" "TRUE" "3.33"
class(a)
## [1] "character"
b = c(FALSE, 1, 0, 2) #akan dikonversikan ke dalam class numeric
b
## [1] 0 1 0 2
class(b)
## [1] "numeric"
as.logical(b)
## [1] FALSE TRUE FALSE TRUE
as.character(b)
## [1] "0" "1" "0" "2"
c = c('Try', 2.4)
c
## [1] "Try" "2.4"
class(c)
## [1] "character"
as.logical(c) #character tidak dapat dikonversikan ke class logical
## [1] NA NA
Selain menggunakan cara diatas, Vector juga dapat dibuat dengan menggunakan beberapa fungsi di bawah ini
x = rep(1:5, times = 2)
x
## [1] 1 2 3 4 5 1 2 3 4 5
y = rep(1:2, each = 10)
y
## [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
z = seq(from = 1, to = 100, by = 4)
z
## [1] 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97
Untuk memanggil (subsetting) elemen dari suatu Vector, kita dapat menggunakan beberapa cara berikut
x = seq(from = 1, to = 100, by = 4)
x
## [1] 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97
x[1]
## [1] 1
x[c(1,3,4)]
## [1] 1 9 13
x[2:10]
## [1] 5 9 13 17 21 25 29 33 37
x[c(TRUE,FALSE,TRUE)]
## [1] 1 9 13 21 25 33 37 45 49 57 61 69 73 81 85 93 97
x > 40
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE
## [13] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [25] TRUE
x[x > 40]
## [1] 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97
Seperti yang dapat dilihat pada contoh di atas, R menggunakan indexing dengan indeks awal 1. Apabila kita mencoba memanggil elemen dengan indeks melebihi panjang Vektor yang ada, kita akan mendapatkan hasil NA (Not Available) seperti contoh berikut
x = c(1,2,3)
x[4]
## [1] NA
Untuk mengubah elemen dari suatu Vector, kita dapat menggunakan beberapa cara berikut
x[1] = 100
x
## [1] 100 2 3
x[1:2] = c(130,200)
x
## [1] 130 200 3
Untuk menggabungkan Vector, kita dapat menggunakan cara berikut
x = c(1,2,3)
y = c(4,5,6)
z = c(x, y)
z
## [1] 1 2 3 4 5 6
z = c(z, c(7,8,9))
z
## [1] 1 2 3 4 5 6 7 8 9
Untuk menghilangkan elemen dari suatu Vector, kita dapat menggunakan beberapa cara berikut
z[-1]
## [1] 2 3 4 5 6 7 8 9
z[-c(1,3,5)]
## [1] 2 4 6 7 8 9
R terkenal dengan kemampuannya untuk melakukan “Vectorization” atau melakukan suatu operasi pada seluruh elemen Vector secara sekaligus. Berikut adalah contoh operasi yang dilakukan antar Vector
x = c(1,2,3,4,5,6)
y = c(2,3,4,5,6,7)
x + 10
## [1] 11 12 13 14 15 16
x + y
## [1] 3 5 7 9 11 13
x * y
## [1] 2 6 12 20 30 42
x / y
## [1] 0.5000000 0.6666667 0.7500000 0.8000000 0.8333333 0.8571429
x >= 5
## [1] FALSE FALSE FALSE FALSE TRUE TRUE
x <= 3
## [1] TRUE TRUE TRUE FALSE FALSE FALSE
Apabila operasi Vector dilakukan antar Vector yang memiliki panjang berbeda, Vector dengan panjang lebih kecil akan digunakan secara berulang dan warning akan muncul apabila panjang Vector yang lebih besar bukan merupakan kelipatan dari panjang Vector yang lebih kecil
x = 1:6
y = 1:2
x
## [1] 1 2 3 4 5 6
y
## [1] 1 2
x * y
## [1] 1 4 3 8 5 12
x = 1:5
y = 1:2
x
## [1] 1 2 3 4 5
y
## [1] 1 2
x + y #akan menghasilkan warning
## Warning in x + y: longer object length is not a multiple of shorter object
## length
## [1] 2 4 4 6 6
Vector juga dapat digunakan sebagai input untuk beberapa fungsi yang ada di dalam R seperti contoh berikut
x = c(11,28,6,96,20,1900,2000)
length(x)
## [1] 7
length(x[x>100])
## [1] 2
sum(x)
## [1] 4061
sum(x>100)
## [1] 2
mean(x)
## [1] 580.1429
max(x)
## [1] 2000
min(x)
## [1] 6
sort(x)
## [1] 6 11 20 28 96 1900 2000
sort(x, decreasing = TRUE)
## [1] 2000 1900 96 28 20 11 6
sqrt(x)
## [1] 3.316625 5.291503 2.449490 9.797959 4.472136 43.588989 44.721360
Berbeda dengan Vector, List dapat digunakan untuk menyimpan object dengan class yang berbeda di dalamnya
a_list = list(22, "ab", TRUE, 1 + 2i, c(1,2,3,99,5))
a_list
## [[1]]
## [1] 22
##
## [[2]]
## [1] "ab"
##
## [[3]]
## [1] TRUE
##
## [[4]]
## [1] 1+2i
##
## [[5]]
## [1] 1 2 3 99 5
class(a_list)
## [1] "list"
Untuk memanggil elemen dari suatu List, cara yang digunakan juga berbeda dari Vector yaitu menggunakan double square bracket seperti contoh berikut
a_list[[3]]
## [1] TRUE
a_list[[5]][4]
## [1] 99
Matriks merupakan Vektor yang memiliki baris dan kolom atau dengan kata lain merupakan Vektor dua dimensi. Untuk membuat Matriks dalam R, kita dapat menggunakan fungsi matrix() yang ada dalam R
a_matrix = matrix(1:6, nrow = 3)
a_matrix
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
a_matrix = matrix(c(1,2,3,4,5,6), ncol = 2)
a_matrix
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
a_matrix = matrix(1:6, nrow = 3, byrow = TRUE)
a_matrix
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
class(a_matrix)
## [1] "matrix" "array"
is.vector(a_matrix[1,]) #matriks merupakan vektor dua dimensi
## [1] TRUE
attributes(a_matrix)
## $dim
## [1] 3 2
dim(a_matrix)
## [1] 3 2
Karena Matriks merupakan Vektor 2 dimensi, pemanggilan elemen di dalam Matriks memerlukan teknik subsetting yang sedikit berbeda sebagai berikut
a_matrix[1,] #mengambil seluruh elemen di baris pertama
## [1] 1 2
a_matrix[,2] #mengambil seluruh elemen di kolom kedua
## [1] 2 4 6
a_matrix[2,2] #mengambil elemen di baris kedua kolom kedua
## [1] 4
a_matrix[c(1,3),2] #mengambil elemen di baris pertama dan ketiga kolom kedua
## [1] 2 6
Berbeda dengan Vektor, memanggil elemen di dalam Matriks dengan indeks melebihi dimensi yang ada akan menghasilkan error seperti pada contoh berikut
a_matrix[5,3] #mengambil elemen di baris kelima kolom ketiga (tidak ada)
## Error in a_matrix[5, 3]: subscript out of bounds
Mengubah isi matriks dapat dilakukan untuk suatu elemen atau suatu kolom/baris secara keseluruhan seperti pada contoh berikut
a_matrix
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
a_matrix[1,] = c(99,98)
a_matrix
## [,1] [,2]
## [1,] 99 98
## [2,] 3 4
## [3,] 5 6
dim(a_matrix)
## [1] 3 2
a_matrix[dim(a_matrix)[1], dim(a_matrix)[2]] = 100
a_matrix
## [,1] [,2]
## [1,] 99 98
## [2,] 3 4
## [3,] 5 100
Untuk menambah elemen dari suatu Matriks, kita dapat menggunakan fungsi cbind() dan rbind() yang ada dalam R seperti berikut
a_matrix
## [,1] [,2]
## [1,] 99 98
## [2,] 3 4
## [3,] 5 100
cbind(a_matrix, c(1,2,3))
## [,1] [,2] [,3]
## [1,] 99 98 1
## [2,] 3 4 2
## [3,] 5 100 3
rbind(a_matrix, c(3,6))
## [,1] [,2]
## [1,] 99 98
## [2,] 3 4
## [3,] 5 100
## [4,] 3 6
cbind(a_matrix, c(0,1)) #warning apabila panjang tidak sesuai
## Warning in cbind(a_matrix, c(0, 1)): number of rows of result is not a multiple
## of vector length (arg 2)
## [,1] [,2] [,3]
## [1,] 99 98 0
## [2,] 3 4 1
## [3,] 5 100 0
Seperti Vektor, operasi antar Matriks juga dapat dilakukan seperti contoh berikut
a_mat = matrix(1:6, nrow = 2)
b_mat = matrix(7:12, nrow = 2)
a_mat
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
b_mat
## [,1] [,2] [,3]
## [1,] 7 9 11
## [2,] 8 10 12
a_mat + b_mat
## [,1] [,2] [,3]
## [1,] 8 12 16
## [2,] 10 14 18
a_mat - b_mat
## [,1] [,2] [,3]
## [1,] -6 -6 -6
## [2,] -6 -6 -6
a_mat * b_mat #perkalian ANTAR ELEMEN matriks
## [,1] [,2] [,3]
## [1,] 7 27 55
## [2,] 16 40 72
a_mat / b_mat
## [,1] [,2] [,3]
## [1,] 0.1428571 0.3333333 0.4545455
## [2,] 0.2500000 0.4000000 0.5000000
sqrt(b_mat)
## [,1] [,2] [,3]
## [1,] 2.645751 3.000000 3.316625
## [2,] 2.828427 3.162278 3.464102
Selain operasi di atas, beberapa operasi khusus Matriks dapat dilakukan seperti contoh berikut
a_mat = matrix(1:6, nrow = 2)
b_mat = matrix(7:12, ncol = 2)
a_mat
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
b_mat
## [,1] [,2]
## [1,] 7 10
## [2,] 8 11
## [3,] 9 12
a_mat %*% b_mat #perkalian matriks
## [,1] [,2]
## [1,] 76 103
## [2,] 100 136
t(a_mat) #transpose matriks
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
colSums(a_mat) #jumlah tiap kolom
## [1] 3 7 11
rowSums(a_mat) #jumlah tiap baris
## [1] 9 12
c_mat = matrix(c(1,3,5,1,5,7,2,8,6), nrow = 3)
c_mat
## [,1] [,2] [,3]
## [1,] 1 1 2
## [2,] 3 5 8
## [3,] 5 7 6
diag(c_mat) #diagonal matriks
## [1] 1 5 6
solve(c_mat) #inverse matriks
## [,1] [,2] [,3]
## [1,] 2.1666667 -0.6666667 0.1666667
## [2,] -1.8333333 0.3333333 0.1666667
## [3,] 0.3333333 0.1666667 -0.1666667
Dataframe merupakan salah satu struktur data yang paling sering digunakan dalam R. Dataframe digunakan untuk menyimpan data dalam bentuk tabel, yang mana setiap kolom dapat memiliki class yang berbeda (tidak seperti Matriks). Untuk membuat Matriks dalam R, kita dapat menggunakan fungsi data.frame() yang ada dalam R
a_df = data.frame(name = c("ash","jane","paul","mark"), score = c(67,56,87,91), pass = c(FALSE,FALSE,TRUE,TRUE), stringsAsFactors = FALSE)
a_df
## name score pass
## 1 ash 67 FALSE
## 2 jane 56 FALSE
## 3 paul 87 TRUE
## 4 mark 91 TRUE
class(a_df)
## [1] "data.frame"
attributes(a_df)
## $names
## [1] "name" "score" "pass"
##
## $class
## [1] "data.frame"
##
## $row.names
## [1] 1 2 3 4
dim(a_df)
## [1] 4 3
Untuk mengambil elemen dari suatu Dataframe, beberapa cara berikut dapat digunakan
a_df[1]
## name
## 1 ash
## 2 jane
## 3 paul
## 4 mark
class(a_df[1])
## [1] "data.frame"
a_df['name']
## name
## 1 ash
## 2 jane
## 3 paul
## 4 mark
class(a_df['name'])
## [1] "data.frame"
a_df$name
## [1] "ash" "jane" "paul" "mark"
class(a_df$name)
## [1] "character"
a_df[c(1,2)]
## name score
## 1 ash 67
## 2 jane 56
## 3 paul 87
## 4 mark 91
a_df[c('name', 'score')]
## name score
## 1 ash 67
## 2 jane 56
## 3 paul 87
## 4 mark 91
a_df[1,2]
## [1] 67
a_df$score[1]
## [1] 67
Untuk mengubah/menambah/menghapus elemen dari suatu Dataframe, cara yang digunakan hampir serupa dengan cara untuk mengubah/menambah/menghapus elemen dari suatu Matrix yaitu sebagai berikut
a_df = data.frame(name = c("ash","jane","paul","mark"), score = c(67,56,87,91), pass = c(FALSE,FALSE,TRUE,TRUE), stringsAsFactors = FALSE)
a_df
## name score pass
## 1 ash 67 FALSE
## 2 jane 56 FALSE
## 3 paul 87 TRUE
## 4 mark 91 TRUE
a_df[1,1] = 'ASH'
a_df
## name score pass
## 1 ASH 67 FALSE
## 2 jane 56 FALSE
## 3 paul 87 TRUE
## 4 mark 91 TRUE
a_df$name[1] = 'Ash'
a_df
## name score pass
## 1 Ash 67 FALSE
## 2 jane 56 FALSE
## 3 paul 87 TRUE
## 4 mark 91 TRUE
a_df = cbind(a_df, new = c(1,2,3,4)) #perlu penamaan kolom
a_df
## name score pass new
## 1 Ash 67 FALSE 1
## 2 jane 56 FALSE 2
## 3 paul 87 TRUE 3
## 4 mark 91 TRUE 4
a_df = rbind(a_df, c("lam",88,TRUE, 5)) #class antar baris menyesuaikan
a_df
## name score pass new
## 1 Ash 67 FALSE 1
## 2 jane 56 FALSE 2
## 3 paul 87 TRUE 3
## 4 mark 91 TRUE 4
## 5 lam 88 TRUE 5
a_df$new = NULL #menghilangkan kolom new
a_df
## name score pass
## 1 Ash 67 FALSE
## 2 jane 56 FALSE
## 3 paul 87 TRUE
## 4 mark 91 TRUE
## 5 lam 88 TRUE
a_df = a_df[-3] #menghilangkan kolom pass
a_df
## name score
## 1 Ash 67
## 2 jane 56
## 3 paul 87
## 4 mark 91
## 5 lam 88
a_df = a_df[-c(1:3),] #menghilangkan 3 baris pertama
a_df
## name score
## 4 mark 91
## 5 lam 88
Beberapa fungsi khusus dalam R yang dapat digunakan untuk Dataframe adalah sebagai berikut
a_df = data.frame(name = c("ash","jane","paul","mark"), score = c(67,56,87,91), pass = c(FALSE,FALSE,TRUE,TRUE), stringsAsFactors = FALSE)
summary(a_df)
## name score pass
## Length:4 Min. :56.00 Mode :logical
## Class :character 1st Qu.:64.25 FALSE:2
## Mode :character Median :77.00 TRUE :2
## Mean :75.25
## 3rd Qu.:88.00
## Max. :91.00
colnames(a_df) = c('new_name', 'new_score', 'new_pass')
a_df
## new_name new_score new_pass
## 1 ash 67 FALSE
## 2 jane 56 FALSE
## 3 paul 87 TRUE
## 4 mark 91 TRUE
Ada kalanya, tabel kita memiliki missing value atau yang biasa direpresentasikan oleh NA atau NaN dalam R. Beberapa operasi terkait permasalah missing value pada Dataframe dapat dilihat pada contoh berikut
a_df = data.frame(name = c("ash","jane","paul","mark"), score = c(67,56,NA,91), pass = c(FALSE,FALSE,NA,TRUE), stringsAsFactors = FALSE)
a_df
## name score pass
## 1 ash 67 FALSE
## 2 jane 56 FALSE
## 3 paul NA NA
## 4 mark 91 TRUE
summary(a_df) #informasi missing value pada setiap kolom
## name score pass
## Length:4 Min. :56.00 Mode :logical
## Class :character 1st Qu.:61.50 FALSE:2
## Mode :character Median :67.00 TRUE :1
## Mean :71.33 NA's :1
## 3rd Qu.:79.00
## Max. :91.00
## NA's :1
complete.cases(a_df) #vector logical berisi informasi apakah suatu baris pada dataframe memiliki missing value atau tidak
## [1] TRUE TRUE FALSE TRUE
a_df[complete.cases(a_df), ] #menampilkan complete cases
## name score pass
## 1 ash 67 FALSE
## 2 jane 56 FALSE
## 4 mark 91 TRUE
na.omit(a_df) #menampilkan complete cases
## name score pass
## 1 ash 67 FALSE
## 2 jane 56 FALSE
## 4 mark 91 TRUE
a_df[!complete.cases(a_df), ] #menampilkan missing value
## name score pass
## 3 paul NA NA
Untuk mensubstitusi nilai NA yang ada pada Dataframe seperti pada contoh di atas, kita dapat menggunakan bantuan fungsi is.na() yang ada pada R
a_df = data.frame(name = c("ash","jane","paul","mark"), score = c(67,NA,NA,91), pass = c(FALSE,NA,NA,TRUE), stringsAsFactors = FALSE)
a_df
## name score pass
## 1 ash 67 FALSE
## 2 jane NA NA
## 3 paul NA NA
## 4 mark 91 TRUE
a_df$score[is.na(a_df$score)] = 50
a_df$pass[is.na(a_df$pass)] = FALSE
a_df
## name score pass
## 1 ash 67 FALSE
## 2 jane 50 FALSE
## 3 paul 50 FALSE
## 4 mark 91 TRUE