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
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
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
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
x <- c(1, 2, 3, 4)
y <- c(10, 20)
x + y
## [1] 11 22 13 24
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
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
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
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
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
nilai <- c(80, 90, NA, 70, 85)
nilai_bersih <- nilai[!is.na(nilai)]
nilai_bersih
## [1] 80 90 70 85
nilai <- c(80, 90, NA, 70, NA)
nilai[is.na(nilai)] <- 0
nilai
## [1] 80 90 0 70 0
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"
paste("X", 1:10, sep = "")
## [1] "X1" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X10"
Hasil:
X1, X2, X3, …, X10.
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
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.
x <- c(10, 20, 30, 40, 50)
x[x > 25]
## [1] 30 40 50
x[x <= 30]
## [1] 10 20 30
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
x <- c(1, 2, 3, 4)
mode(x)
## [1] "numeric"
length(x)
## [1] 4
class(x)
## [1] "numeric"
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"
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"
x <- c("10", "20", "30")
x
## [1] "10" "20" "30"
as.numeric(x)
## [1] 10 20 30
x <- c("10", "dua", "30")
as.numeric(x)
## Warning: NAs introduced by coercion
## [1] 10 NA 30
Perhatikan warning dan hasil NA.
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.
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
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"
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.
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"
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"
table(jurusan_f)
## jurusan_f
## Informatika Matematika Statistika
## 2 1 3
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"
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.
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
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
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.
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.
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.
M <- matrix(1:12, nrow = 3)
dim(M)
## [1] 3 4
nrow(M)
## [1] 3
ncol(M)
## [1] 4
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
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.
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
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
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.
A
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
t(A)
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
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
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.
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.
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
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
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
gender <- factor(
c("L", "P", "P", "L", "P", "L", "L")
)
table(gender)
## gender
## L P
## 4 3
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