Operasi dasar
Software R
dapat digunakan untuk menyelesaikan masalah dalam matematika misalnya penjumlahan, perkalian dan seterusnya. Penjumlahan dapat dilakukan dengan tanda operasi +
, pengurangan adalah -
, perkalian menggunakan *
, dan pembagian berupa /
. Berikut contohnya:
Penjumlahan:
1+1
## [1] 2
Pengurangan:
5-4
## [1] 1
Perkalian:
2*3
## [1] 6
Pembagian:
9/3
## [1] 3
Operasi yang lain misalnya:
Eksponen dengan menggunakan ^
:
3^2
## [1] 9
Akar bilangan dengan menggunakan sqrt
:
sqrt(16)
## [1] 4
Modulus (sisa nilai atas pembagian dengan bilangan tertentu) dengan menggunakan %%
:
10%%5
## [1] 0
11%%5
## [1] 1
13%%5
## [1] 3
Penggunaan variabel
Varibel digunakan untuk menyimpan data. Nilai variabel dapat diubah-ubah sesuai kebutuhan pengguna. Variabel dalam R
case-sensitif artinya penggunaan huruf besar dan kecil akan dianggap dua variable yang berbeda, a
berbeda dengan A
. Misalnya, barisan nilai dari 1 sampai dengan 10 disimpan di variabel a
.
1:10
## [1] 1 2 3 4 5 6 7 8 9 10
a <- 1:10
Jika variabel a
dicetak, maka akan muncul nilai dari 1 sampai dengan 10. Jika pengguna salah misalnya menuliskan A
bukan a
, maka kesalahan akan muncul karena bahasa R
case-sensitive.
a
## [1] 1 2 3 4 5 6 7 8 9 10
print(a)
## [1] 1 2 3 4 5 6 7 8 9 10
> A
Error: object 'A' not found
Variabel yang telah dibuat dapat diganti nilainya. Nilai terakhir yang dimasukkan menjadi nilai dari variabel. Misalnya, variabel b
awalnya adalah barisan nilai dari 11 sampai dengan 20 kemudian diganti dengan barisan nilai dari 5 sampai dengan 11. Nilai b
berubah menjadi nilai terakhir yang dimasukkan. Jika variabel b
digunakan nilai terakhir yang digunakan.
b <- 11:20
b
## [1] 11 12 13 14 15 16 17 18 19 20
b <- 5:11
b
## [1] 5 6 7 8 9 10 11
Misalnya, variabel b
dikalikan dengan 2
, maka yang dikalikan adalah barisan nilai dari 5 sampai dengan 11 (nilai b
terakhir), bukan barisan nilai 11 sampai dengan 20.
b*2
## [1] 10 12 14 16 18 20 22
Ada beberapa cara membuat variabel:
Menggunakan tanda <-
atau ->
x <- c(1, 2, 3, 5, 7)
x
## [1] 1 2 3 5 7
c(4, 6, 8, 9) -> y
y
## [1] 4 6 8 9
Menggunakan assign
assign("z", c(1, 2, 3, 5, 7))
z
## [1] 1 2 3 5 7
Meskipun menggunakan =
dapat digunakan untuk membuat variabel, tetapi tidak disarankan karena dapat membingungkan saat bekerja dengan operasi logical. Penulis lebih suka menggunakan tanda <-
untuk membuat variabel.
p = c(1, 2, 3, 5, 7)
p
## [1] 1 2 3 5 7
Tipe data pada variabel
Setiap variabel memiliki tipe data yang selalu melekat (inherits). Beberapa tipe data (class) variabel antara lain:
Numeric:
d <- c(1)
d
## [1] 1
class(d)
## [1] "numeric"
Integer:
e <- as.integer(1)
e
## [1] 1
class(e)
## [1] "integer"
Character:
f <- letters[1]
f
## [1] "a"
class(f)
## [1] "character"
Logical:
g <- 1 < 5
g
## [1] TRUE
class(g)
## [1] "logical"
Factor:
h <- as.factor(rep(letters[1:3], 3))
h
## [1] a b c a b c a b c
## Levels: a b c
class(h)
## [1] "factor"
Struktur data
Vector
Vector dalam R
sebanding dengan vektor baris secara matematis, artinya vector pada R
hanya terdiri atas 1 baris dan banyak kolom. Variabel h
pada contoh diatas adalah contoh dari factor vector.
h
## [1] a b c a b c a b c
## Levels: a b c
class(h)
## [1] "factor"
Matrix
Matrix dalam R
sebanding dengan matriks secara matematis, artinya matrix pada R
terdiri atas baris dan kolom. Ingat bahwa vektor baris sama dengan matriks dengan hanya 1 baris dan vektor kolom adalah matriks yang hanya memiliki satu kolom.
mat <- matrix(1.5:8.5, 2, 4)
mat
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
## [2,] 2.5 4.5 6.5 8.5
class(mat)
## [1] "matrix"
Nilai (class) elemen pada matrix hanya dapat berupa numeric, integer atau logical, sehingga matriks dapat berupa numerical matrix, integer matrix, logical matrix atau gabungan dari ketiga class tersebut.
Logical matrix:
matlog <- matrix(1:9 < 5, 3, 3)
matlog
## [,1] [,2] [,3]
## [1,] TRUE TRUE FALSE
## [2,] TRUE FALSE FALSE
## [3,] TRUE FALSE FALSE
class(matlog)
## [1] "matrix"
Mixed matrix:
matgab <- matrix(0, 3, 3)
matgab[1,] <- 1.5:3.5 #baris 1 adalah numerical
matgab[2,] <- 1:3 #baris 2 adalah integer
matgab[3,] <- 1:3 < 2 #baris 3 adalah logical
matgab
## [,1] [,2] [,3]
## [1,] 1.5 2.5 3.5
## [2,] 1.0 2.0 3.0
## [3,] 1.0 0.0 0.0
class(matgab)
## [1] "matrix"
Array
Matrix dapat disebut dengan array dengan dimensi 2 (karena terdiri atas baris dan kolom), sehingga array pada R
merupakan multidimensional matrix. Misalnya array dengan dimensi 2
, 4
, 3
, dapat dibuat dengan cara:
arrayx <- array(1:3, dim = c(2,4,3))
arrayx
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 3 2 1
## [2,] 2 1 3 2
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 3 2 1 3
## [2,] 1 3 2 1
##
## , , 3
##
## [,1] [,2] [,3] [,4]
## [1,] 2 1 3 2
## [2,] 3 2 1 3
class(arrayx)
## [1] "array"
Seperti halnya dengan matrix, array hanya dapat diisi variabel dengan kelas numerical, integer, dan logical.
Data frame
Data frame dalam R
sama dengan matriks secara format, artinya data frame pada R
terdiri atas baris dan kolom. Perbedaan dengan matrix adalah elemen dari data frame dapat berupa character atau pun factor yang tidak akan pernah muncul pada matrix.
dat <- data.frame(x1 = a[-10], x2 = h)
dat
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
class(dat)
## [1] "data.frame"
Perhatikan bahwa variabel dat terdiri atas 9 baris dan 2 kolom. Kolom pertama adalah x1
yang berasal dari integer vector dan kolom kedua (x2
) berasal dari factor vector sehingga keduanya dapat digabungkan pada sebuah data frame. Jika keduanya dipaksa digabungkan menjadi sebuah matrix, maka R
akan mengubah kelas variabel h
(kolom kedua) sehingga tidak lagi menjadi kelas factor.
matdat <- matrix(c(a[-10], h), 9, 2)
matdat
## [,1] [,2]
## [1,] 1 1
## [2,] 2 2
## [3,] 3 3
## [4,] 4 1
## [5,] 5 2
## [6,] 6 3
## [7,] 7 1
## [8,] 8 2
## [9,] 9 3
class(matdat)
## [1] "matrix"
List
List merupakan struktur data yang paling bebas pada R
. Semua kelas variabel dapat digabungkan pada list, misalnya variabel a
(integer), h
(factor), dat
(data frame), mat
(matrix).
ll <- list(a, h, dat, mat)
ll
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
##
## [[2]]
## [1] a b c a b c a b c
## Levels: a b c
##
## [[3]]
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
##
## [[4]]
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
## [2,] 2.5 4.5 6.5 8.5
class(ll)
## [1] "list"
Bahkan, list dapat berupa list yang lain. Misalnya list ll
dimasukkan kedalam list baru, dengan variabel yang lain (a
dan h
).
ll2 <- list(a, h, ll)
ll2
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
##
## [[2]]
## [1] a b c a b c a b c
## Levels: a b c
##
## [[3]]
## [[3]][[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
##
## [[3]][[2]]
## [1] a b c a b c a b c
## Levels: a b c
##
## [[3]][[3]]
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
##
## [[3]][[4]]
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
## [2,] 2.5 4.5 6.5 8.5
class(ll2)
## [1] "list"
Operasi variabel
Operasi dasar dapat diterapkan pada variabel jika tipe datanya sesuai. Misalnya:
numerical/ logical/ integer vector dengan numerical/ logical/ integer vector:
a2 <- 11.5:20.5
class(a2)
## [1] "numeric"
class(a)
## [1] "integer"
a
## [1] 1 2 3 4 5 6 7 8 9 10
a2
## [1] 11.5 12.5 13.5 14.5 15.5 16.5 17.5 18.5 19.5 20.5
a+a2
## [1] 12.5 14.5 16.5 18.5 20.5 22.5 24.5 26.5 28.5 30.5
Panjang vektor yang dioperasikan harus sama, jika tidak akan ada warning karena vektor yang lebih pendek nilainya akan diulang.
> a + b
[1] 6 8 10 12 14 16 18 13 15 17
Warning message:
In a + b : longer object length is not a multiple of shorter object length
Penjumlahan, pengurangan, perkalian matriks dengan konstanta:
mat
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
## [2,] 2.5 4.5 6.5 8.5
mat+10
## [,1] [,2] [,3] [,4]
## [1,] 11.5 13.5 15.5 17.5
## [2,] 12.5 14.5 16.5 18.5
mat-2
## [,1] [,2] [,3] [,4]
## [1,] -0.5 1.5 3.5 5.5
## [2,] 0.5 2.5 4.5 6.5
mat*2
## [,1] [,2] [,3] [,4]
## [1,] 3 7 11 15
## [2,] 5 9 13 17
Penjumlahan, pengurangan, perkalian matriks dengan matriks:
mat+mat
## [,1] [,2] [,3] [,4]
## [1,] 3 7 11 15
## [2,] 5 9 13 17
t(mat)%*%mat
## [,1] [,2] [,3] [,4]
## [1,] 8.5 16.5 24.5 32.5
## [2,] 16.5 32.5 48.5 64.5
## [3,] 24.5 48.5 72.5 96.5
## [4,] 32.5 64.5 96.5 128.5
Khusus perkalian matriks dengan matriks ingat aturan dimensi pada matriks!
> mat%*%mat
Error in mat %*% mat : non-conformable arguments
Indexing
Indexing dapat dilakukan pada variabel berupa vector
, matrix
, data frame
, dan list
.
Vektor dapat diindeks dengan []
:
a
## [1] 1 2 3 4 5 6 7 8 9 10
a[1] #elemen nomor 1
## [1] 1
a[9:10] #elemen nomor 9 sampai dengan 10
## [1] 9 10
a[c(1,4:5,8:9)] #elemen nomor 1, 4, 5, 8, dan 9
## [1] 1 4 5 8 9
Matriks diindeks menggunakan [,]
. Penggunaan drop = FALSE bertujuan untuk mempertahankan kelas variabel tetap sebuah matriks.
mat
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
## [2,] 2.5 4.5 6.5 8.5
mat[1,2] #elemen baris 1 kolom 2
## [1] 3.5
mat[1:2,3:4] #elemen baris 1 dan 2, kolom 3 dan 4
## [,1] [,2]
## [1,] 5.5 7.5
## [2,] 6.5 8.5
mat[,2] #semua elemen kolom 2
## [1] 3.5 4.5
mat[,2, drop = FALSE] #semua elemen kolom 2/ vektor kolom
## [,1]
## [1,] 3.5
## [2,] 4.5
mat[1,] #semua elemen baris 1
## [1] 1.5 3.5 5.5 7.5
Penggunaan drop = FALSE dapat digunakan untuk membuat vektor baris.
matb <- mat[1,] #ambil elemen matriks pada baris 1 saja
matbd <- mat[1,,drop = FALSE]
matb
## [1] 1.5 3.5 5.5 7.5
matbd
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
class(matb)
## [1] "numeric"
class(matbd)
## [1] "matrix"
Begitu pula dengan vektor kolom.
matk <- mat[,1] #ambil elemen matriks pada kolom 1 saja
matkd <- mat[,1, drop = FALSE]
matk
## [1] 1.5 2.5
matkd
## [,1]
## [1,] 1.5
## [2,] 2.5
class(matk)
## [1] "numeric"
class(matkd)
## [1] "matrix"
array diindeks seperti dengan matriks yaitu [,]
tetapi dengan jumlah koma yang berbeda tergantung dimensi dari array. drop = FALSE juga dapat digunakan untuk mempertahankan kelas variabel agar tetap array.
arrayx
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 3 2 1
## [2,] 2 1 3 2
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 3 2 1 3
## [2,] 1 3 2 1
##
## , , 3
##
## [,1] [,2] [,3] [,4]
## [1,] 2 1 3 2
## [2,] 3 2 1 3
arrayx[,,3] #array 3 dimensi, jumlah koma = 2
## [,1] [,2] [,3] [,4]
## [1,] 2 1 3 2
## [2,] 3 2 1 3
arrayx[1,,3]
## [1] 2 1 3 2
arrayx[1,,3, drop = FALSE]
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 2 1 3 2
arrayx[,3,3]
## [1] 3 1
data frame diindeks seperti matriks yaitu dengan menggunakan [,]
atau menggunakan nama kolomnya (variabel).
dat
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
dat[1:3,2] #elemen baris 1 sampai 3 dan kolom 2
## [1] a b c
## Levels: a b c
dat$x2[1:3] #elemen baris 1 sampai 3 dan kolom 1
## [1] a b c
## Levels: a b c
dat[4:8,] #elemen baris 4 sampai 8 dan semua kolom
## x1 x2
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
list diindeks menggunakan [[]]
.
ll
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9 10
##
## [[2]]
## [1] a b c a b c a b c
## Levels: a b c
##
## [[3]]
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
##
## [[4]]
## [,1] [,2] [,3] [,4]
## [1,] 1.5 3.5 5.5 7.5
## [2,] 2.5 4.5 6.5 8.5
ll[[3]] #elemen list yang ketiga
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
ll[[4]][,1, drop = FALSE] #elemen list yang keempat,
## [,1]
## [1,] 1.5
## [2,] 2.5
#karena elemen keempat adalah matriks maka
#aturan matriks berlaku setelah tanda [[]].
Subsetting
Subsetting digunakan untuk memilih atau mengeluarkan komponen dalam variabel. Misalnya dari data dat
hanya diambil berdasarkan nilai kolom x1
yang lebih kecil dari 5.
dat
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
## 5 5 b
## 6 6 c
## 7 7 a
## 8 8 b
## 9 9 c
dat[dat$x1 < 5,]
## x1 x2
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 a
Ambil data dari variabel dat
yang kolom x2 nya “a” saja.
subset(dat, x2 == "a")
## x1 x2
## 1 1 a
## 4 4 a
## 7 7 a
Ambil data dari variabel h
yang mempunyai character “a” saja.
h
## [1] a b c a b c a b c
## Levels: a b c
h[h=="a"]
## [1] a a a
## Levels: a b c
subset(h, h=="a")
## [1] a a a
## Levels: a b c
Ambil data dari variabel a
yang genap saja.
a
## [1] 1 2 3 4 5 6 7 8 9 10
a[a%%2==0]
## [1] 2 4 6 8 10
subset(a, a%%2==0)
## [1] 2 4 6 8 10