BAB 2 - Simple Manipulations: Numbers and Vectors

2.1 Membuat Vector dan Assignment

x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
x
## [1] 10.4  5.6  3.1  6.4 21.7
length(x)
## [1] 5

2.2 Menggabungkan Vector

x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
y <- c(x, 0, x)
y
##  [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7
length(y)
## [1] 11

2.3 Operasi Aritmatika Vector

x <- c(2, 4, 6, 8, 10)
x + 2
## [1]  4  6  8 10 12
x - 2
## [1] 0 2 4 6 8
x * 2
## [1]  4  8 12 16 20
x / 2
## [1] 1 2 3 4 5
x^2
## [1]   4  16  36  64 100
sqrt(x)
## [1] 1.414214 2.000000 2.449490 2.828427 3.162278

2.4 Fungsi Matematika Dasar

x <- c(5, 8, 3, 10, 7)
sum(x)
## [1] 33
mean(x)
## [1] 6.6
var(x)
## [1] 7.3
min(x)
## [1] 3
max(x)
## [1] 10
range(x)
## [1]  3 10
prod(x)
## [1] 8400
sort(x)
## [1]  3  5  7  8 10

2.5 Recycling Rule

x <- c(1, 2, 3, 4)
y <- c(10, 20)

x + y
## [1] 11 22 13 24

2.6 Membuat Sequence

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
10:1
##  [1] 10  9  8  7  6  5  4  3  2  1
seq(1, 10)
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(from = 1, to = 10, by = 2)
## [1] 1 3 5 7 9
seq(from = 0, to = 1, by = 0.1)
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

2.7 Menggunakan rep()

x <- c(1, 2, 3)

rep(x, times = 3)
## [1] 1 2 3 1 2 3 1 2 3
rep(x, each = 3)
## [1] 1 1 1 2 2 2 3 3 3

2.8 Logical Vector

x <- c(5, 10, 15, 20, 25)

x > 10
## [1] FALSE FALSE  TRUE  TRUE  TRUE
x >= 15
## [1] FALSE FALSE  TRUE  TRUE  TRUE
x == 20
## [1] FALSE FALSE FALSE  TRUE FALSE
x != 20
## [1]  TRUE  TRUE  TRUE FALSE  TRUE
x < 15
## [1]  TRUE  TRUE FALSE FALSE FALSE

Operator AND, OR, dan NOT

x <- c(5, 10, 15, 20, 25)

(x > 10) & (x < 25)
## [1] FALSE FALSE  TRUE  TRUE FALSE
(x < 10) | (x > 20)
## [1]  TRUE FALSE FALSE FALSE  TRUE
!(x > 10)
## [1]  TRUE  TRUE FALSE FALSE FALSE

2.9 Missing Values / NA

nilai <- c(80, 90, NA, 70, 85)

nilai
## [1] 80 90 NA 70 85
is.na(nilai)
## [1] FALSE FALSE  TRUE FALSE FALSE

Coba langsung menghitung rata-rata:

mean(nilai)
## [1] NA

Hasilnya akan NA.

Untuk mengabaikan missing value:

mean(nilai, na.rm = TRUE)
## [1] 81.25

Menghapus NA dengan Indexing

nilai <- c(80, 90, NA, 70, 85)

nilai_bersih <- nilai[!is.na(nilai)]

nilai_bersih
## [1] 80 90 70 85

Mengganti NA dengan 0

nilai <- c(80, 90, NA, 70, NA)

nilai[is.na(nilai)] <- 0

nilai
## [1] 80 90  0 70  0

2.10 Character Vector

nama <- c("Andi", "Budi", "Citra", "Dina")

nama
## [1] "Andi"  "Budi"  "Citra" "Dina"

Menggabungkan teks:

nama <- c("Andi", "Budi", "Citra")

paste("Mahasiswa", nama)
## [1] "Mahasiswa Andi"  "Mahasiswa Budi"  "Mahasiswa Citra"
paste("Mahasiswa", nama, sep = "-")
## [1] "Mahasiswa-Andi"  "Mahasiswa-Budi"  "Mahasiswa-Citra"

Membuat Nama Variabel Otomatis

paste("X", 1:10, sep = "")
##  [1] "X1"  "X2"  "X3"  "X4"  "X5"  "X6"  "X7"  "X8"  "X9"  "X10"

Hasil:

X1, X2, X3, …, X10.

2.11 Indexing Vector

x <- c(10, 20, 30, 40, 50)

x[1]
## [1] 10
x[3]
## [1] 30
x[1:3]
## [1] 10 20 30
x[c(1, 3, 5)]
## [1] 10 30 50

Negative Index

x <- c(10, 20, 30, 40, 50)

x[-1]
## [1] 20 30 40 50
x[-c(1, 3)]
## [1] 20 40 50

Negative index berarti mengeluarkan elemen tersebut.

Logical Index

x <- c(10, 20, 30, 40, 50)

x[x > 25]
## [1] 30 40 50
x[x <= 30]
## [1] 10 20 30

Memberikan Nama pada Vector

buah <- c(5, 10, 1, 20)

names(buah) <- c(
  "jeruk",
  "pisang",
  "apel",
  "persik"
)

buah
##  jeruk pisang   apel persik 
##      5     10      1     20
buah["apel"]
## apel 
##    1
buah[c("apel", "jeruk")]
##  apel jeruk 
##     1     5

BAB 3 - Objects, Their Modes and Attributes

3.1 Mode dan Length

x <- c(1, 2, 3, 4)

mode(x)
## [1] "numeric"
length(x)
## [1] 4
class(x)
## [1] "numeric"

Berbagai Jenis Object

angka <- c(1, 2, 3)

teks <- c("A", "B", "C")

logika <- c(TRUE, FALSE, TRUE)

mode(angka)
## [1] "numeric"
mode(teks)
## [1] "character"
mode(logika)
## [1] "logical"
class(angka)
## [1] "numeric"
class(teks)
## [1] "character"
class(logika)
## [1] "logical"

3.2 Konversi Mode

Numeric menjadi character:

x <- 0:9

karakter <- as.character(x)

karakter
##  [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
mode(karakter)
## [1] "character"

Character menjadi integer:

angka <- as.integer(karakter)

angka
##  [1] 0 1 2 3 4 5 6 7 8 9
mode(angka)
## [1] "numeric"

Coba Konversi Berikut

x <- c("10", "20", "30")

x
## [1] "10" "20" "30"
as.numeric(x)
## [1] 10 20 30

Percobaan Konversi yang Tidak Valid

x <- c("10", "dua", "30")

as.numeric(x)
## Warning: NAs introduced by coercion
## [1] 10 NA 30

Perhatikan warning dan hasil NA.

3.3 Mengubah Panjang Object

x <- numeric()

x
## numeric(0)
length(x)
## [1] 0

Tambahkan elemen pada posisi ke-3:

x[3] <- 17

x
## [1] NA NA 17
length(x)
## [1] 3

Perhatikan posisi pertama dan kedua otomatis menjadi NA.

Memotong Vector

alpha <- 1:10

alpha
##  [1]  1  2  3  4  5  6  7  8  9 10
length(alpha) <- 5

alpha
## [1] 1 2 3 4 5

3.4 Attributes

x <- c(10, 20, 30)

attributes(x)
## NULL

Tambahkan nama:

names(x) <- c("A", "B", "C")

x
##  A  B  C 
## 10 20 30
attributes(x)
## $names
## [1] "A" "B" "C"

Attribute dim

z <- 1:9

z
## [1] 1 2 3 4 5 6 7 8 9
attr(z, "dim") <- c(3, 3)

z
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

Vector sekarang diperlakukan sebagai matrix.

3.5 Class Object

x <- 1:5

class(x)
## [1] "integer"

Matrix:

M <- matrix(1:9, nrow = 3)

M
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
class(M)
## [1] "matrix" "array"

Factor:

f <- factor(c("A", "B", "A", "C"))

f
## [1] A B A C
## Levels: A B C
class(f)
## [1] "factor"

BAB 4 - Ordered and Unordered Factors

4.1 Membuat Factor

jurusan <- c(
  "Statistika",
  "Informatika",
  "Statistika",
  "Matematika",
  "Informatika",
  "Statistika"
)

jurusan
## [1] "Statistika"  "Informatika" "Statistika"  "Matematika"  "Informatika"
## [6] "Statistika"

Ubah menjadi factor:

jurusan_f <- factor(jurusan)

jurusan_f
## [1] Statistika  Informatika Statistika  Matematika  Informatika Statistika 
## Levels: Informatika Matematika Statistika
levels(jurusan_f)
## [1] "Informatika" "Matematika"  "Statistika"

Menghitung Frekuensi Factor

table(jurusan_f)
## jurusan_f
## Informatika  Matematika  Statistika 
##           2           1           3

4.2 Contoh Factor dari Materi

state <- c(
  "tas", "sa", "qld", "nsw", "nsw",
  "nt", "wa", "wa", "qld", "vic",
  "nsw", "vic", "qld", "qld", "sa"
)

statef <- factor(state)

statef
##  [1] tas sa  qld nsw nsw nt  wa  wa  qld vic nsw vic qld qld sa 
## Levels: nsw nt qld sa tas vic wa
levels(statef)
## [1] "nsw" "nt"  "qld" "sa"  "tas" "vic" "wa"

4.3 tapply()

Misalkan terdapat nilai mahasiswa dan kelasnya:

kelas <- factor(
  c("A", "A", "B", "B", "C", "C")
)

nilai <- c(80, 90, 70, 75, 85, 95)

tapply(nilai, kelas, mean)
##    A    B    C 
## 85.0 72.5 90.0

tapply() menghitung fungsi tertentu untuk setiap kelompok.

Mencoba Fungsi Lain

tapply(nilai, kelas, sum)
##   A   B   C 
## 170 145 180
tapply(nilai, kelas, max)
##  A  B  C 
## 90 75 95
tapply(nilai, kelas, min)
##  A  B  C 
## 80 70 85
tapply(nilai, kelas, length)
## A B C 
## 2 2 2

4.4 Ordered Factor

Misalnya tingkat kepuasan:

kepuasan <- c(
  "Puas",
  "Tidak Puas",
  "Sangat Puas",
  "Puas",
  "Tidak Puas"
)

Buat ordered factor:

kepuasan_f <- ordered(
  kepuasan,
  levels = c(
    "Tidak Puas",
    "Puas",
    "Sangat Puas"
  )
)

kepuasan_f
## [1] Puas        Tidak Puas  Sangat Puas Puas        Tidak Puas 
## Levels: Tidak Puas < Puas < Sangat Puas

Membandingkan Ordered Factor

kepuasan_f[1]
## [1] Puas
## Levels: Tidak Puas < Puas < Sangat Puas
kepuasan_f[3]
## [1] Sangat Puas
## Levels: Tidak Puas < Puas < Sangat Puas
kepuasan_f[1] < kepuasan_f[3]
## [1] TRUE

Karena level memiliki urutan:

Tidak Puas < Puas < Sangat Puas.


BAB 5 - Arrays and Matrices

5.1 Membuat Matrix

M <- matrix(
  1:12,
  nrow = 3,
  ncol = 4
)

M
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

Perhatikan bahwa secara default R mengisi matrix berdasarkan kolom.

Matrix byrow

M2 <- matrix(
  1:12,
  nrow = 3,
  ncol = 4,
  byrow = TRUE
)

M2
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

Bandingkan M dan M2.

5.2 Dimensi Matrix

M <- matrix(1:12, nrow = 3)

dim(M)
## [1] 3 4
nrow(M)
## [1] 3
ncol(M)
## [1] 4

5.3 Indexing Matrix

M <- matrix(1:12, nrow = 3)

M
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

Ambil baris 1 kolom 2:

M[1, 2]
## [1] 4

Ambil seluruh baris kedua:

M[2, ]
## [1]  2  5  8 11

Ambil seluruh kolom ketiga:

M[, 3]
## [1] 7 8 9

Ambil baris 1 sampai 2:

M[1:2, ]
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11

5.4 Membuat Array

A <- array(
  1:24,
  dim = c(3, 4, 2)
)

A
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

Cek dimensinya:

dim(A)
## [1] 3 4 2

Artinya array mempunyai ukuran:

3 × 4 × 2.

Mengambil Elemen Array

A[1, 1, 1]
## [1] 1
A[2, 3, 1]
## [1] 8
A[, , 1]
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
A[, , 2]
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

5.5 Operasi Matrix Element-wise

A <- matrix(
  c(1, 2,
    3, 4),
  nrow = 2,
  byrow = TRUE
)

B <- matrix(
  c(5, 6,
    7, 8),
  nrow = 2,
  byrow = TRUE
)

A
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
B
##      [,1] [,2]
## [1,]    5    6
## [2,]    7    8

Penjumlahan:

A + B
##      [,1] [,2]
## [1,]    6    8
## [2,]   10   12

Pengurangan:

A - B
##      [,1] [,2]
## [1,]   -4   -4
## [2,]   -4   -4

Perkalian setiap elemen:

A * B
##      [,1] [,2]
## [1,]    5   12
## [2,]   21   32

5.6 Matrix Multiplication

Perhatikan perbedaannya:

A * B
##      [,1] [,2]
## [1,]    5   12
## [2,]   21   32

dengan:

A %*% B
##      [,1] [,2]
## [1,]   19   22
## [2,]   43   50

* = perkalian setiap elemen.

%*% = perkalian matrix.

5.7 Transpose Matrix

A
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
t(A)
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4

5.8 Diagonal Matrix

A <- matrix(
  c(1, 2,
    3, 4),
  nrow = 2,
  byrow = TRUE
)

diag(A)
## [1] 1 4

Membuat identity matrix:

diag(3)
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    1    0
## [3,]    0    0    1

Membuat diagonal matrix:

diag(c(2, 4, 6))
##      [,1] [,2] [,3]
## [1,]    2    0    0
## [2,]    0    4    0
## [3,]    0    0    6

5.9 Menyelesaikan Sistem Persamaan Linear

Misalkan:

2x + y = 5

x + 3y = 6

Bentuk matrix:

A <- matrix(
  c(2, 1,
    1, 3),
  nrow = 2,
  byrow = TRUE
)

b <- c(5, 6)

A
##      [,1] [,2]
## [1,]    2    1
## [2,]    1    3
b
## [1] 5 6

Cari solusi:

solusi <- solve(A, b)

solusi
## [1] 1.8 1.4

Verifikasi:

A %*% solusi
##      [,1]
## [1,]    5
## [2,]    6

Hasil seharusnya kembali mendekati b.

5.10 Inverse Matrix

A
##      [,1] [,2]
## [1,]    2    1
## [2,]    1    3
A_inverse <- solve(A)

A_inverse
##      [,1] [,2]
## [1,]  0.6 -0.2
## [2,] -0.2  0.4

Coba:

A %*% A_inverse
##               [,1] [,2]
## [1,]  1.000000e+00    0
## [2,] -1.110223e-16    1

Hasil seharusnya mendekati identity matrix.

5.11 Eigenvalue dan Eigenvector

A <- matrix(
  c(2, 1,
    1, 2),
  nrow = 2,
  byrow = TRUE
)

eigen(A)
## eigen() decomposition
## $values
## [1] 3 1
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068

Hanya eigenvalue:

eigen(A)$values
## [1] 3 1

Eigenvector:

eigen(A)$vectors
##           [,1]       [,2]
## [1,] 0.7071068 -0.7071068
## [2,] 0.7071068  0.7071068

5.12 cbind()

Menggabungkan berdasarkan kolom:

x <- c(1, 2, 3)

y <- c(4, 5, 6)

cbind(x, y)
##      x y
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6

5.13 rbind()

Menggabungkan berdasarkan baris:

x <- c(1, 2, 3)

y <- c(4, 5, 6)

rbind(x, y)
##   [,1] [,2] [,3]
## x    1    2    3
## y    4    5    6

5.14 Frequency Table

gender <- factor(
  c("L", "P", "P", "L", "P", "L", "L")
)

table(gender)
## gender
## L P 
## 4 3

Tabel Dua Arah

gender <- factor(
  c("L", "P", "P", "L", "P", "L")
)

kelas <- factor(
  c("A", "A", "B", "B", "A", "B")
)

table(gender, kelas)
##       kelas
## gender A B
##      L 1 2
##      P 2 1