Skip to content

Latest commit

 

History

History
1335 lines (977 loc) · 20.5 KB

1.-Pengenalan-R.md

File metadata and controls

1335 lines (977 loc) · 20.5 KB

1.Pengenalan R

Muhammad Luqman 2018-04-05

Info Pendahuluan

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')

Basic

Operation

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 Assignment

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

Class dalam R

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>

Character

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"

Numeric

a = 10
class(a)
## [1] "numeric"
a = 10.23
class(a)
## [1] "numeric"

Complex

a = 1 + 2i
class(a)
## [1] "complex"

Logical

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

Struktur Data dalam R

R memiliki beberapa struktur data yang umum digunakan seperti yang akan dicontohkan di bawah ini

Vector

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

List

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

Matrices

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

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