Struktur Data

Struktur data sangat penting untuk dipahami karena dengan struktur data dapat mengurangi kompleksitas ruang dan waktu dari tugas-tugas yang berbeda. Struktur data sering diatur berdasarkan dimensinya (1D, 2D, atau nD) dan apakah bersifat homogen atau heterogen berdasarka tipe datanya.

1. Vectors

Vectors adalah kumpulan terurut dari tipe data dasar dengan panjang tertentu. Vectors adalah struktur data satu dimensi. Ciri-ciri dari vectors ini adalah bahwa semua elemen di dalamnya harus berasal dari tipe data yang identik.

Contoh penulisan vectors:

# vector numerik
x <- c(3, 4, 5, 6)

# vector karakter
y <- c("Apel", "Jeruk", "Rambutan", "Salak")

# vector logika
z <- c("TRUE", "FALSE", "TRUE")

Seringkali nilai vektor tidak lengkap atau ada nilai yang hilang (missing value). Di pemrograman R, nilai missing value dilambangkan dengan NA (not available). Berikut ini adalah contoh penerapan di R:

age <- c(23, 34, NA, 56, 45)

# bisa juga seperti ini -> vektor nama dengan format penulisan name=value
jumlah_buah <- c(apel=3, jeruk=NA, mangga=5, rambutan=3, salak=10)

Subset pada vectors

Kita bisa mengambil satu atau beberapa nilai di dalam vektor dengan memanfaatkan subset. Misalkan ada vektor bilangan berisi 23, 34, 25, 45. Elemen dengan nilai 23 ada pada indeks pertama, 34 pada indeks kedua, 25 pada indeks ketiga, dan 45 pada indeks keempat.

Ada tiga cara pengambilan nilai dalam suatu vektor.

  • Positive index, yaitu memilih elemen vektor berdasarkan posisinya (indeks) dalam kurung siku.
  • Negative index, yaitu dengan mengecualikan elemen vektor.
  • Logical, yaitu hanya elemen-elemen yang bersesuaian (TRUE atau FALSE) yang akan menjadi subset.

Berikut ini adalah implementasi dari subset.

# list buah-buahan
fruits <- c('apple', 'banana', 'lemon', 'cherry', 'strawberry')

# positive index
fruits[2] # hasilnya mengambil indeks kedua, yaitu banana
## [1] "banana"
fruits[5] # hasilnya mengambil indeks kelima, yaitu strawberry
## [1] "strawberry"
fruits[c(1, 4)] # hasilnya mengambil indeks 1 dan 4, yaitu apple dan cherry
## [1] "apple"  "cherry"
# negative index

fruits[-1] # hasilnya adalah mengambil elemen selain indeks 1, yaitu dari banana s.d. strawberry
## [1] "banana"     "lemon"      "cherry"     "strawberry"
fruits[-c(1, 4)] # hasilnya adalah mengambil elemen selain indeks 1 dan 4, yaitu selain apple dan cherry
## [1] "banana"     "lemon"      "strawberry"
fruits[-c(1:3)] # hasilnya adalah mengambil elemen selain indeks dari 1 s.d. 3, yaitu selain apple, banana, dan lemon
## [1] "cherry"     "strawberry"
# logical subset

# mengambil buah-buahan yang jumlah karakternya di atas 5
fruits[nchar(fruits) > 5] # hasilnya menampilkan nama-nama buah seperti banana, cherry, strawberry
## [1] "banana"     "cherry"     "strawberry"
# mengambi buah-buahan yang namanya mengandung unsur huruf 'e'
fruits[grepl("e", fruits)] # hasilnya apple, lemon, cherry, strawberry
## [1] "apple"      "lemon"      "cherry"     "strawberry"
# memilih nama buah yang berawalan 'a'
fruits[grepl("^a", fruits)] # hasilnya hanya apple
## [1] "apple"
# memilih nama buah dengan beberapa kondisi, seperti mengandung huruf 'a' dan jumlah karakternya lebih dari 5
fruits[grepl("a", fruits) & nchar(fruits) > 5] # hasilnya adalah banana dan strawberry
## [1] "banana"     "strawberry"

Operasi matematika dalam vektor

Berikut ini adalah contoh penggunaan operasi matematika dalam vektor

numbers <- c(4, 6, 7, 3, 2, 9, 5)
# memperoleh nilai maksimum
max(numbers)
## [1] 9
# memperoleh nilai minimum
min(numbers)
## [1] 2
# memperoleh range vektor
range(numbers)
## [1] 2 9
# memperoleh jumlah vektor
length(numbers)
## [1] 7
# total penjumlahan
sum(numbers)
## [1] 36
# product element vector -> perkalian semua elemen
prod(numbers)
## [1] 45360
# rata-rata vector
mean(numbers)
## [1] 5.142857
# median
median(numbers)
## [1] 5
# standar deviasi
sd(numbers)
## [1] 2.410295
# varians
var(numbers)
## [1] 5.809524
# mengurutkan elemen vektor
sort(numbers)
## [1] 2 3 4 5 6 7 9

Deret angka pada vektor

Untuk membuat deret angka dalam vektor, kita bisa menggunakan operasi colon atau titik dua (:). Operasi ini digunakan untuk memisahkan antara nilai awal dan nilai akhir deret bilangan. Berikut ini adalah contoh operasi deret.

# vektor bernilai 1 s.d. 10
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
# vektor bernilai 10 s.d. -1
10:-1
##  [1] 10  9  8  7  6  5  4  3  2  1  0 -1
deret <- 1:20
sum(deret)
## [1] 210

Ada juga cara lain dalam membuat deret, dengan menggunakan fungsi seq, seperti pada contoh berikut.

# membuat deret aritmatika dimana dimulai dari 1 dengan pertambahan 3
# sehingga deretnya menjadi: 1, 4, 7. 10, 13, 16, 19, 22, 25
deret_aritmatika <- seq(1, 25, by = 3)
deret_aritmatika
## [1]  1  4  7 10 13 16 19 22 25
# deret aritmatika dengan interval pecahan
deret_pecahan <- seq(0, 1, by = 0.1)
deret_pecahan
##  [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
# deret aritmatika mundur
deret_mundur <- seq(10, 1, by = -1)
deret_mundur
##  [1] 10  9  8  7  6  5  4  3  2  1
# deret dengan jumlah elemen tertentu tapi jaraknya mengikuti
deret_jarak_sama <- seq(1, 10, length.out = 5)
deret_jarak_sama # 1.00  3.25  5.50  7.75 10.00
## [1]  1.00  3.25  5.50  7.75 10.00

Selain itu, ada juga penggunaan nilai berulang, kita bisa menggunakan fungsi rep. Berikut adalah contohnya:

rep(5, 8) # angka 5 (parameter 1) akan dicetak/diulang sebanyak 8 kali (parameter 2)
## [1] 5 5 5 5 5 5 5 5

Untuk deret geometrik, ada juga fungsi yang bisa digunakan, yaitu cumprod().

rasio <- 2
jumlah_bilangan <- 5
deret_geometri <- cumprod(rep(rasio, jumlah_bilangan))
print(deret_geometri) # 2 4 8 16 32
## [1]  2  4  8 16 32
# untuk penghitungan eksponensial
nilai_awal <- 3
rasio <- 3
jumlah_bilangan <- 4
deret_eksponensial <- nilai_awal * rasio^(0:(jumlah_bilangan - 1))
print(deret_eksponensial) # 3 9 27 81
## [1]  3  9 27 81
# kita juga bisa memanfaatkan fungsi
fungsi_geometrik <- function(nilai_awal, rasio, jumlah_bilangan) {
  return(nilai_awal * rasio^(0:(jumlah_bilangan - 1)))
}

fungsi_geometrik(2, 4, 6) # 2 8 32 128 512 2048
## [1]    2    8   32  128  512 2048
fungsi_aritmatik <- function(nilai_awal, selisih, jumlah_bilangan) {
  return(nilai_awal + (0:(jumlah_bilangan - 1)) * selisih)
}

fungsi_aritmatik(1, 3, 6) # 1 4 7 10 13 16
## [1]  1  4  7 10 13 16

2. Lists

Lists itu seperti wadah, dimana berisi campuran tipe data. Lists merupakan jenis vectors khusus di mana setiap elemen dapat menjadi jenis yang berbeda. Berikut ini adalah contoh penggunaan list.

mylist <- list(2, "A", c(4, 5, 2), iris[1:5,])
mylist
## [[1]]
## [1] 2
## 
## [[2]]
## [1] "A"
## 
## [[3]]
## [1] 4 5 2
## 
## [[4]]
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa

Untuk memanggil elemen dari list, ada beberapa cara, seperti di bawah ini.

# Menampilkan index kedua dengan aksesor kurung siku tunggal
mylist[2] # Akses subset dari list
## [[1]]
## [1] "A"
# Menampilkan index kedua dengan aksesor kurung siku ganda
mylist[[2]] # Akses elemen tunggal
## [1] "A"
# Menampilkan index kedua s/d ketiga
mylist[2:3]
## [[1]]
## [1] "A"
## 
## [[2]]
## [1] 4 5 2
# menghitung jumlah elemen dalam list
length(mylist)
## [1] 4

Seperti halnya vektor, di dalam list juga kita bisa memberi nama pada setiap elemen list untuk mempermudah dalam akses dan pemahaman.

# Membuat list dengan nama elemen
student <- list(
  name = "Andi",
  age = 21,
  grades = c(90, 85, 88)
)

print(student)
## $name
## [1] "Andi"
## 
## $age
## [1] 21
## 
## $grades
## [1] 90 85 88
# Mengakses nama-nama elemen
names(student)
## [1] "name"   "age"    "grades"

Untuk mengakses elemen list seperti contoh di atas, kita bisa menggunakan dollar sign $ dan diikuti dengan nama elemen.

student$name
## [1] "Andi"
# Akses elemen di dalam elemen, seperti grades
student$grades[2]
## [1] 85

List student di atas bisa kita lakukan manipulasi dengan beberapa cara, seperti pada kode berikut ini.

# mengubah usia mahasiswa
student$age <- 24
print(student$age)
## [1] 24
# Menambahkan alamat ke dalam list
student$address <- "Jakarta"
print(student)
## $name
## [1] "Andi"
## 
## $age
## [1] 24
## 
## $grades
## [1] 90 85 88
## 
## $address
## [1] "Jakarta"
# Menghapus elemen address
student$address <- NULL
print(student)
## $name
## [1] "Andi"
## 
## $age
## [1] 24
## 
## $grades
## [1] 90 85 88

Penambahan elemen baru juga bisa menggunakan fungsi yang sudah disediakan oleh R, yaitu append().

# Menambahkan elemen baru di posisi kedua
student <- append(student, list(sex = "Male"), after = 1)
print(student)
## $name
## [1] "Andi"
## 
## $sex
## [1] "Male"
## 
## $age
## [1] 24
## 
## $grades
## [1] 90 85 88

List dapat mengandung list lain sebagai elemennya, ini disebut nested list.

# Membuat list bersarang
nested_list <- list(
  sublist1 = list(a = 1, b = 2),
  sublist2 = list(c = 3, d = 4)
)
print(nested_list)
## $sublist1
## $sublist1$a
## [1] 1
## 
## $sublist1$b
## [1] 2
## 
## 
## $sublist2
## $sublist2$c
## [1] 3
## 
## $sublist2$d
## [1] 4
# Membuat nested list untuk company
company <- list(
  name = "DJPb",
  employees = list(
    list(
      name = "Ari",
      age = 40,
      position = "Manager"
    ),
    list(
      name = "Budi",
      age = 30,
      position = "Accountant"
    )
  ),
  location = "Bandung"
)
print(company)
## $name
## [1] "DJPb"
## 
## $employees
## $employees[[1]]
## $employees[[1]]$name
## [1] "Ari"
## 
## $employees[[1]]$age
## [1] 40
## 
## $employees[[1]]$position
## [1] "Manager"
## 
## 
## $employees[[2]]
## $employees[[2]]$name
## [1] "Budi"
## 
## $employees[[2]]$age
## [1] 30
## 
## $employees[[2]]$position
## [1] "Accountant"
## 
## 
## 
## $location
## [1] "Bandung"

Untuk mengakses elemen pada nested list tersebut, maka kita bisa gunakan cara berikut.

# Mengakses nama karyawan pertama
company$employees[[1]]$name
## [1] "Ari"
# Karyawan baru
new_employee <- list(
  name = "Citra",
  age = 28,
  position = "Manager"
)

# Menambahkan ke dalam list employees
company$employees <- append(company$employees, list(new_employee))
print(company$employees)
## [[1]]
## [[1]]$name
## [1] "Ari"
## 
## [[1]]$age
## [1] 40
## 
## [[1]]$position
## [1] "Manager"
## 
## 
## [[2]]
## [[2]]$name
## [1] "Budi"
## 
## [[2]]$age
## [1] 30
## 
## [[2]]$position
## [1] "Accountant"
## 
## 
## [[3]]
## [[3]]$name
## [1] "Citra"
## 
## [[3]]$age
## [1] 28
## 
## [[3]]$position
## [1] "Manager"

Fungsi-fungsi lain yang berguna untuk List

1. as.list()

Kita juga bisa mengkonversi struktur data lain, seperti vektor atau dataframe ke dalam list dengan fungsi as.list().

# Mengonversi vector ke list
vec <- c(1, 2, 3, 4)
list_from_vec <- as.list(vec)

print(list_from_vec)
## [[1]]
## [1] 1
## 
## [[2]]
## [1] 2
## 
## [[3]]
## [1] 3
## 
## [[4]]
## [1] 4
# Mengonversi dataframe ke list
df <- data.frame(
  id = 1:3,
  name = c("Ali", "Budi", "Cici"),
  score = c(85, 90, 95)
)

list_from_df <- as.list(df)

print(list_from_df)
## $id
## [1] 1 2 3
## 
## $name
## [1] "Ali"  "Budi" "Cici"
## 
## $score
## [1] 85 90 95

2. lapply()

lapply() menerapkan sebuah fungsi ke setiap elemen dalam list dan mengembalikan hasil dalam bentuk list.

# List angka
kumpulan_bilangan <- list(a = 1:5, b = 6:10, c = 11:15)

# Menggunakan lapply untuk menghitung panjang elemen
lapply(kumpulan_bilangan, length)
## $a
## [1] 5
## 
## $b
## [1] 5
## 
## $c
## [1] 5
# Menghitung rata-rata setiap elemen list
averages <- lapply(kumpulan_bilangan, mean)
print(averages)
## $a
## [1] 3
## 
## $b
## [1] 8
## 
## $c
## [1] 13

3. sapply()

sapply() mirip dengan lapply(), tetapi mencoba menyederhanakan hasilnya menjadi vector atau matrix jika memungkinkan.

# Menggunakan sapply (lebih ringkas)
sapply(kumpulan_bilangan, length)
## a b c 
## 5 5 5
# Menggunakan sapply
averages_simplified <- sapply(kumpulan_bilangan, mean)
print(averages_simplified)
##  a  b  c 
##  3  8 13

3. Dataframes

Dataframes merupakan objek data yang paling populer karena lebih mudah melihat data dalam bentuk tabel, yang terdiri dari banyak kolom dengan tiap kolom berisi list ataupun vector dengan jumlah data yang sama. Untuk membuat data frame kita bisa gunakan function data.frame.

Berikut beberapa hal terkait dataframe:

  • Dataframe harus memiliki nama kolom dan setiap baris harus memiliki nama yang unik
  • Setiap kolom dataframe harus memiliki jumlah item yang sama
  • Setiap item dalam satu kolom dataframe harus memiliki tipe data yang sama
  • Kolom dataframe yang berbeda mungkin memiliki tipe data yang berbeda pula
# Membuat vektor
id <- c(1, 2, 3, 4)
nama <- c("Ari", "Budi", "Citra", "David")
usia <- c(25, 30, 35, 40)

# Membuat DataFrame
df <- data.frame(id, nama, usia)

print(df)
##   id  nama usia
## 1  1   Ari   25
## 2  2  Budi   30
## 3  3 Citra   35
## 4  4 David   40

Kita juga sudah belajar tentang list dan data frame bisa dibuat dari list.

# Membuat list
data_list <- list(
  id = c(1, 2, 3, 4),
  nama = c("Ari", "Budi", "Citra", "David"),
  usia = c(25, 30, 35, 40)
)

# Membuat DataFrame dari list
df <- as.data.frame(data_list)

print(df)
##   id  nama usia
## 1  1   Ari   25
## 2  2  Budi   30
## 3  3 Citra   35
## 4  4 David   40

Selain itu, membuat data frame juga bisa bisa melalui file eksternal, seperti file csv dengan memanfaatkan fungsi read.csv().

student_df <- read.csv("students.csv")
print(student_df)
##    id    nama usia            jurusan
## 1   1     Ari   25 Teknik Informatika
## 2   2    Budi   30          Manajemen
## 3   3   Citra   35          Akuntansi
## 4   4   David   40      Ilmu Komputer
## 5   5     Eko   30         Statistika
## 6   6  Farhan   28          Manajemen
## 7   7   Guruh   24         Statistika
## 8   8    Hadi   34          Manajemen
## 9   9   Irene   27          Akuntansi
## 10 10   Johan   42          Manajemen
## 11 11   Kalam   25    Teknik Industri
## 12 12    Lisa   24      Ilmu Komputer
## 13 13    Mona   28             Bisnis
## 14 14   Nanda   27          Manajemen
## 15 15    Opan   27          Akuntansi
## 16 16   Pendi   38 Teknik Informatika
## 17 17  Qonita   23      Desain Visual
## 18 18 Rafinah   26             Bisnis
## 19 19 Sabrina   30         Statistika
## 20 20   Tariq   26         Agribisnis

Cara akses data frame bisa menggunakan $ atau []. Berikut ini adalah contoh penggunaan akses data frame student_df.

1. Akses Kolom

# mengakses kolom nama
student_df$nama
##  [1] "Ari"     "Budi"    "Citra"   "David"   "Eko"     "Farhan"  "Guruh"  
##  [8] "Hadi"    "Irene"   "Johan"   "Kalam"   "Lisa"    "Mona"    "Nanda"  
## [15] "Opan"    "Pendi"   "Qonita"  "Rafinah" "Sabrina" "Tariq"
# atau bisa menggunakan
student_df[["nama"]]
##  [1] "Ari"     "Budi"    "Citra"   "David"   "Eko"     "Farhan"  "Guruh"  
##  [8] "Hadi"    "Irene"   "Johan"   "Kalam"   "Lisa"    "Mona"    "Nanda"  
## [15] "Opan"    "Pendi"   "Qonita"  "Rafinah" "Sabrina" "Tariq"
# atau bisa juga
student_df[, "nama"]
##  [1] "Ari"     "Budi"    "Citra"   "David"   "Eko"     "Farhan"  "Guruh"  
##  [8] "Hadi"    "Irene"   "Johan"   "Kalam"   "Lisa"    "Mona"    "Nanda"  
## [15] "Opan"    "Pendi"   "Qonita"  "Rafinah" "Sabrina" "Tariq"

1. Akses Baris

# akses baris pertama
student_df[1,]
##   id nama usia            jurusan
## 1  1  Ari   25 Teknik Informatika
# akses beberapa baris
student_df[1:2,]
##   id nama usia            jurusan
## 1  1  Ari   25 Teknik Informatika
## 2  2 Budi   30          Manajemen

3. Akses Elemen Spesifik

Kita bisa mengakses elemen spesifik dengan menggabungkan indeks baris dan kolom.

student_df[2, 3] # baris kedua (budi) kolom ketiga (usia)
## [1] 30
student_df[10, 4] # baris kesepuluh kolom keempat (jurusan)
## [1] "Manajemen"

4. Akses berdasarkan kondisik

# Filter data untuk mendapatkan baris di mana usia lebih dari 30
student_df_filtered <- student_df[student_df$usia > 30, ]

print(student_df_filtered)
##    id  nama usia            jurusan
## 3   3 Citra   35          Akuntansi
## 4   4 David   40      Ilmu Komputer
## 8   8  Hadi   34          Manajemen
## 10 10 Johan   42          Manajemen
## 16 16 Pendi   38 Teknik Informatika

Untuk akses dataset bukan dari lokal PC/Laptop, kita bisa coba menggunakan cara berikut.

students <- read.csv("https://raw.githubusercontent.com/ekotwidodo/Kanwil-DJPb-Data-Analytics-2024/main/students.csv")
students
##    id    nama usia            jurusan
## 1   1     Ari   25 Teknik Informatika
## 2   2    Budi   30          Manajemen
## 3   3   Citra   35          Akuntansi
## 4   4   David   40      Ilmu Komputer
## 5   5     Eko   30         Statistika
## 6   6  Farhan   28          Manajemen
## 7   7   Guruh   24         Statistika
## 8   8    Hadi   34          Manajemen
## 9   9   Irene   27          Akuntansi
## 10 10   Johan   42          Manajemen
## 11 11   Kalam   25    Teknik Industri
## 12 12    Lisa   24      Ilmu Komputer
## 13 13    Mona   28             Bisnis
## 14 14   Nanda   27          Manajemen
## 15 15    Opan   27          Akuntansi
## 16 16   Pendi   38 Teknik Informatika
## 17 17  Qonita   23      Desain Visual
## 18 18 Rafinah   26             Bisnis
## 19 19 Sabrina   30         Statistika
## 20 20   Tariq   26         Agribisnis

Mengubah Data dalam Data Frame

Mengubah nilai elemen

# Mengubah nilai dalam DataFrame
student_df[2, "usia"] <- 31 # mengubah baris kedua (budi) untuk kolom usia ganti dengan 31
print(student_df)
##    id    nama usia            jurusan
## 1   1     Ari   25 Teknik Informatika
## 2   2    Budi   31          Manajemen
## 3   3   Citra   35          Akuntansi
## 4   4   David   40      Ilmu Komputer
## 5   5     Eko   30         Statistika
## 6   6  Farhan   28          Manajemen
## 7   7   Guruh   24         Statistika
## 8   8    Hadi   34          Manajemen
## 9   9   Irene   27          Akuntansi
## 10 10   Johan   42          Manajemen
## 11 11   Kalam   25    Teknik Industri
## 12 12    Lisa   24      Ilmu Komputer
## 13 13    Mona   28             Bisnis
## 14 14   Nanda   27          Manajemen
## 15 15    Opan   27          Akuntansi
## 16 16   Pendi   38 Teknik Informatika
## 17 17  Qonita   23      Desain Visual
## 18 18 Rafinah   26             Bisnis
## 19 19 Sabrina   30         Statistika
## 20 20   Tariq   26         Agribisnis

Menambah kolom baru

Kita bisa menambahkan kolom baru, misalkan jkel (jenis kelamin), seperti pada contoh berikut.

student_df$jkel <- c("L","L","P","L","L","L","L","L","P","L","L","P","P","L","L","L","P","P","P","L")
print(student_df)
##    id    nama usia            jurusan jkel
## 1   1     Ari   25 Teknik Informatika    L
## 2   2    Budi   31          Manajemen    L
## 3   3   Citra   35          Akuntansi    P
## 4   4   David   40      Ilmu Komputer    L
## 5   5     Eko   30         Statistika    L
## 6   6  Farhan   28          Manajemen    L
## 7   7   Guruh   24         Statistika    L
## 8   8    Hadi   34          Manajemen    L
## 9   9   Irene   27          Akuntansi    P
## 10 10   Johan   42          Manajemen    L
## 11 11   Kalam   25    Teknik Industri    L
## 12 12    Lisa   24      Ilmu Komputer    P
## 13 13    Mona   28             Bisnis    P
## 14 14   Nanda   27          Manajemen    L
## 15 15    Opan   27          Akuntansi    L
## 16 16   Pendi   38 Teknik Informatika    L
## 17 17  Qonita   23      Desain Visual    P
## 18 18 Rafinah   26             Bisnis    P
## 19 19 Sabrina   30         Statistika    P
## 20 20   Tariq   26         Agribisnis    L

Menambah baris baru

Menambahkan baris baru dilakukan dengan menggunakan fungsi rbind().

# Baris baru yang akan ditambahkan
baris_baru <- data.frame(id = 21, nama = "Untung", usia = 41, jurusan = "Bisnis", jkel = "L")
# Menambahkan baris baru
student_df <- rbind(student_df, baris_baru)
print(student_df)
##    id    nama usia            jurusan jkel
## 1   1     Ari   25 Teknik Informatika    L
## 2   2    Budi   31          Manajemen    L
## 3   3   Citra   35          Akuntansi    P
## 4   4   David   40      Ilmu Komputer    L
## 5   5     Eko   30         Statistika    L
## 6   6  Farhan   28          Manajemen    L
## 7   7   Guruh   24         Statistika    L
## 8   8    Hadi   34          Manajemen    L
## 9   9   Irene   27          Akuntansi    P
## 10 10   Johan   42          Manajemen    L
## 11 11   Kalam   25    Teknik Industri    L
## 12 12    Lisa   24      Ilmu Komputer    P
## 13 13    Mona   28             Bisnis    P
## 14 14   Nanda   27          Manajemen    L
## 15 15    Opan   27          Akuntansi    L
## 16 16   Pendi   38 Teknik Informatika    L
## 17 17  Qonita   23      Desain Visual    P
## 18 18 Rafinah   26             Bisnis    P
## 19 19 Sabrina   30         Statistika    P
## 20 20   Tariq   26         Agribisnis    L
## 21 21  Untung   41             Bisnis    L

Operasi pada Data Frame

Mengurutkan data

Kita dapat mengurutkan DataFrame berdasarkan satu atau lebih kolom.

# Mengurutkan DataFrame berdasarkan 'usia'
student_df_sorted <- student_df[order(student_df$usia), ]
print(student_df_sorted)
##    id    nama usia            jurusan jkel
## 17 17  Qonita   23      Desain Visual    P
## 7   7   Guruh   24         Statistika    L
## 12 12    Lisa   24      Ilmu Komputer    P
## 1   1     Ari   25 Teknik Informatika    L
## 11 11   Kalam   25    Teknik Industri    L
## 18 18 Rafinah   26             Bisnis    P
## 20 20   Tariq   26         Agribisnis    L
## 9   9   Irene   27          Akuntansi    P
## 14 14   Nanda   27          Manajemen    L
## 15 15    Opan   27          Akuntansi    L
## 6   6  Farhan   28          Manajemen    L
## 13 13    Mona   28             Bisnis    P
## 5   5     Eko   30         Statistika    L
## 19 19 Sabrina   30         Statistika    P
## 2   2    Budi   31          Manajemen    L
## 8   8    Hadi   34          Manajemen    L
## 3   3   Citra   35          Akuntansi    P
## 16 16   Pendi   38 Teknik Informatika    L
## 4   4   David   40      Ilmu Komputer    L
## 21 21  Untung   41             Bisnis    L
## 10 10   Johan   42          Manajemen    L

Menggabungkan data

Kita bisa gunakan fungsi rbind() atau merge() untuk menggabungkan dua data frame, tergantung kondisinya. Jika data frame yang satu dengan yang lain kolomnya sama (hanya ingin digabung setelah baris terakhir data frame pertama), gunakan rbind(). Namun, jika kolomnya ada yang tidak sama, kita bisa gunakan merge().

# data frame kedua
second_student_df <- data.frame(
  id = c(22, 23, 24, 25, 26),
  nama = c("Vera", "Wanda", "Xaviera", "Yudi", "Zahid"),
  usia = c(25, 33, 27, 38, 24),
  jurusan = c("Ilmu Komputer", "Bisnis", "Desain Visual", "Teknik Industri", "Hubungan Internasional"),
  jkel = c("P", "P", "P", "L", "L")
)

# Karena kolomnya sama, kita gunakan rbind()
student_df_merged <- rbind(student_df, second_student_df)

print(student_df_merged)
##    id    nama usia                jurusan jkel
## 1   1     Ari   25     Teknik Informatika    L
## 2   2    Budi   31              Manajemen    L
## 3   3   Citra   35              Akuntansi    P
## 4   4   David   40          Ilmu Komputer    L
## 5   5     Eko   30             Statistika    L
## 6   6  Farhan   28              Manajemen    L
## 7   7   Guruh   24             Statistika    L
## 8   8    Hadi   34              Manajemen    L
## 9   9   Irene   27              Akuntansi    P
## 10 10   Johan   42              Manajemen    L
## 11 11   Kalam   25        Teknik Industri    L
## 12 12    Lisa   24          Ilmu Komputer    P
## 13 13    Mona   28                 Bisnis    P
## 14 14   Nanda   27              Manajemen    L
## 15 15    Opan   27              Akuntansi    L
## 16 16   Pendi   38     Teknik Informatika    L
## 17 17  Qonita   23          Desain Visual    P
## 18 18 Rafinah   26                 Bisnis    P
## 19 19 Sabrina   30             Statistika    P
## 20 20   Tariq   26             Agribisnis    L
## 21 21  Untung   41                 Bisnis    L
## 22 22    Vera   25          Ilmu Komputer    P
## 23 23   Wanda   33                 Bisnis    P
## 24 24 Xaviera   27          Desain Visual    P
## 25 25    Yudi   38        Teknik Industri    L
## 26 26   Zahid   24 Hubungan Internasional    L
# data frame ketiga
third_student_df <- data.frame(
  id = 1:26,
  ipk = round(runif(26, min = 3.00, max = 4.00), 2)
)

# Karena kolomnya berbeda dengan id sebagai key yang sama dengan student_df, kita gunakan merge()
student_df_final <- merge(student_df_merged, third_student_df, by = "id", all = TRUE)

print(student_df_final)
##    id    nama usia                jurusan jkel  ipk
## 1   1     Ari   25     Teknik Informatika    L 3.16
## 2   2    Budi   31              Manajemen    L 4.00
## 3   3   Citra   35              Akuntansi    P 3.45
## 4   4   David   40          Ilmu Komputer    L 3.17
## 5   5     Eko   30             Statistika    L 3.08
## 6   6  Farhan   28              Manajemen    L 3.33
## 7   7   Guruh   24             Statistika    L 3.89
## 8   8    Hadi   34              Manajemen    L 3.17
## 9   9   Irene   27              Akuntansi    P 3.65
## 10 10   Johan   42              Manajemen    L 3.80
## 11 11   Kalam   25        Teknik Industri    L 3.05
## 12 12    Lisa   24          Ilmu Komputer    P 3.24
## 13 13    Mona   28                 Bisnis    P 3.52
## 14 14   Nanda   27              Manajemen    L 3.13
## 15 15    Opan   27              Akuntansi    L 3.74
## 16 16   Pendi   38     Teknik Informatika    L 3.39
## 17 17  Qonita   23          Desain Visual    P 3.95
## 18 18 Rafinah   26                 Bisnis    P 3.81
## 19 19 Sabrina   30             Statistika    P 3.34
## 20 20   Tariq   26             Agribisnis    L 3.40
## 21 21  Untung   41                 Bisnis    L 3.09
## 22 22    Vera   25          Ilmu Komputer    P 3.58
## 23 23   Wanda   33                 Bisnis    P 3.91
## 24 24 Xaviera   27          Desain Visual    P 3.54
## 25 25    Yudi   38        Teknik Industri    L 3.86
## 26 26   Zahid   24 Hubungan Internasional    L 3.55

Aggregasi data

Kita bisa melakukan aggregasi dengan menggunakan aggregate() atau tapply().

# Menghitung rata-rata usia berdasarkan jenis kelamin
student_agregat <- aggregate(usia ~ jkel, data = student_df_final, mean)

print(student_agregat)
##   jkel  usia
## 1    L 31.25
## 2    P 27.80

Fungsi-fungsi lain dalam Data Frame

Berikut ini adalah beberapa fungsi yang sering digunakan saat bekerja dengan dataframe.

# head(df): Menampilkan beberapa baris pertama dari DataFrame
head(student_df_final)
##   id   nama usia            jurusan jkel  ipk
## 1  1    Ari   25 Teknik Informatika    L 3.16
## 2  2   Budi   31          Manajemen    L 4.00
## 3  3  Citra   35          Akuntansi    P 3.45
## 4  4  David   40      Ilmu Komputer    L 3.17
## 5  5    Eko   30         Statistika    L 3.08
## 6  6 Farhan   28          Manajemen    L 3.33
# tail(df): Menampilkan beberapa baris terakhir dari DataFrame
tail(student_df_final)
##    id    nama usia                jurusan jkel  ipk
## 21 21  Untung   41                 Bisnis    L 3.09
## 22 22    Vera   25          Ilmu Komputer    P 3.58
## 23 23   Wanda   33                 Bisnis    P 3.91
## 24 24 Xaviera   27          Desain Visual    P 3.54
## 25 25    Yudi   38        Teknik Industri    L 3.86
## 26 26   Zahid   24 Hubungan Internasional    L 3.55
# dim(df): Mengembalikan dimensi (jumlah baris dan kolom) dari DataFrame
dim(student_df_final)
## [1] 26  6
# str(df): Menampilkan struktur DataFrame
str(student_df_final)
## 'data.frame':    26 obs. of  6 variables:
##  $ id     : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ nama   : chr  "Ari" "Budi" "Citra" "David" ...
##  $ usia   : num  25 31 35 40 30 28 24 34 27 42 ...
##  $ jurusan: chr  "Teknik Informatika" "Manajemen" "Akuntansi" "Ilmu Komputer" ...
##  $ jkel   : chr  "L" "L" "P" "L" ...
##  $ ipk    : num  3.16 4 3.45 3.17 3.08 3.33 3.89 3.17 3.65 3.8 ...
# summary(df): Menampilkan ringkasan statistik untuk setiap kolom dalam DataFrame
summary(student_df_final)
##        id            nama                usia         jurusan         
##  Min.   : 1.00   Length:26          Min.   :23.00   Length:26         
##  1st Qu.: 7.25   Class :character   1st Qu.:25.25   Class :character  
##  Median :13.50   Mode  :character   Median :27.50   Mode  :character  
##  Mean   :13.50                      Mean   :29.92                     
##  3rd Qu.:19.75                      3rd Qu.:33.75                     
##  Max.   :26.00                      Max.   :42.00                     
##      jkel                ipk       
##  Length:26          Min.   :3.050  
##  Class :character   1st Qu.:3.188  
##  Mode  :character   Median :3.485  
##                     Mean   :3.492  
##                     3rd Qu.:3.785  
##                     Max.   :4.000
# names(df): Menampilkan nama-nama kolom dalam DataFrame
names(student_df_final)
## [1] "id"      "nama"    "usia"    "jurusan" "jkel"    "ipk"
# nrow(df): Mengembalikan jumlah baris dalam DataFrame
nrow(student_df_final)
## [1] 26
# ncol(df): Mengembalikan jumlah kolom dalam DataFrame
ncol(student_df_final)
## [1] 6

4. Matrices

Matrices atau matriks adalah susunan persegi panjang dari bilangan-bilangan dalam bentuk baris dan kolom. Matriks digunakan untuk menggabungkan vektor dengan tipe yang sama, yang bisa berupa numerik, karakter, atau logis.

Untuk membuat matriks di R, kita bisa gunakan matrix().

# Membuat matriks dari vektor 1 sampai 9, dengan 3 baris dan 3 kolom
mat <- matrix(1:9, nrow = 3, ncol = 3)

print(mat)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

Kita juga bisa menggunakan cbind() atau rbind() untuk membuat matriks.

# membuat vektor numerik
col1 <- c(5, 6, 7, 8, 9)
col2 <- c(2, 4, 5, 9, 8)
col3 <- c(7, 3, 4, 8, 7)

# menggabungkan vektor berdasarkan kolom
my_mat <- cbind(col1, col2, col3)
my_mat
##      col1 col2 col3
## [1,]    5    2    7
## [2,]    6    4    3
## [3,]    7    5    4
## [4,]    8    9    8
## [5,]    9    8    7

Pengisian matriks apabila menggunakan matrix() bisa juga dilakukan secara baris dengan menambahkan parameter byrow = TRUE.

# Membuat matriks yang diisi secara baris
mat <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE)

print(mat)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9

Selain itu, kita juga bisa membuat matriks dengan mengkonversi vektor atau list menjadi matriks dengan menetapkan dimensi menggunakan dim().

# Membuat matriks dari vektor
vec <- 1:6
dim(vec) <- c(2, 3)

print(vec)
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6

Untuk mengakses elemen di dalam matriks, kita bisa menggunakan beberapa cara, seperti.

Akses elemen tunggal

Kita mengakses elemen tunggal dalam matriks dengan menggunakan indeks baris dan kolom.

# Mengakses elemen di baris 2, kolom 3
elemen_tunggal <- mat[2, 3]
print(elemen_tunggal)
## [1] 6

Akses seluruh baris atau kolom

Kita dapat mengakses seluruh baris atau kolom dengan meninggalkan indeks yang lain kosong.

# akses seluruh baris kedua
elemen_baris_kedua <- mat[2, ]
print(elemen_baris_kedua)
## [1] 4 5 6
# akses seluruh kolom kedua
elemen_kolom_kedua <- mat[, 2]
print(elemen_kolom_kedua)
## [1] 2 5 8

Untuk mengubah elemen di dalam matriks, caranya tidak jauh berbeda dengan stuktur data yang sebelumnya dibahas.

# Mengubah elemen di baris pertama, kolom kedua
mat[1, 2] <- 10
print(mat)
##      [,1] [,2] [,3]
## [1,]    1   10    3
## [2,]    4    5    6
## [3,]    7    8    9
# Mengubah seluruh baris kedua
mat[2, ] <- c(11, 12, 13)
print(mat)
##      [,1] [,2] [,3]
## [1,]    1   10    3
## [2,]   11   12   13
## [3,]    7    8    9

Operasi Matriks

Penjumlahan dan pengurangan matriks

Penjumlahan dan pengurangan antara dua matriks syaratnya adalah ukuran matriks sama.

# Matriks lain
matriks1 <- matrix(9:1, nrow = 3)
matriks2 <- matrix(1:9, nrow = 3, byrow = TRUE)

print(matriks1)
##      [,1] [,2] [,3]
## [1,]    9    6    3
## [2,]    8    5    2
## [3,]    7    4    1
print(matriks2)
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
# Penjumlahan matriks
matriks_penjumlahan <- matriks1 + matriks2
print(matriks_penjumlahan)
##      [,1] [,2] [,3]
## [1,]   10    8    6
## [2,]   12   10    8
## [3,]   14   12   10
# Pengurangan matriks
matriks_pengurangan <- matriks1 - matriks2
print(matriks_pengurangan)
##      [,1] [,2] [,3]
## [1,]    8    4    0
## [2,]    4    0   -4
## [3,]    0   -4   -8

Perkalian matriks

Perkalian elemen-elemen dalam matriks dapat dilakukan dengan menggunakan operator *, sedangkan perkalian matriks secara matematika (dot product) dilakukan dengan %*%.

# Perkalian matriks
matriks_perkalian <- matriks1 * matriks2
print(matriks_perkalian)
##      [,1] [,2] [,3]
## [1,]    9   12    9
## [2,]   32   25   12
## [3,]   49   32    9
# Perkalian matriks secara matematis dengan dot product
matriks_dot_product <- matriks1 %*% matriks2
print(matriks_dot_product)
##      [,1] [,2] [,3]
## [1,]   54   72   90
## [2,]   42   57   72
## [3,]   30   42   54

Transpose matriks

Transpose dari matriks (menukar baris menjadi kolom dan sebaliknya) dilakukan dengan fungsi t().

# Transpose matriks
matriks_transpose <- t(matriks_dot_product)
print(matriks_transpose)
##      [,1] [,2] [,3]
## [1,]   54   42   30
## [2,]   72   57   42
## [3,]   90   72   54

Determinan matriks

Kita dapat menghitung determinan dari matriks persegi dengan fungsi det().

# Matriks 3x3
det_matriks_perkalian <- det(matriks_perkalian)
print(det_matriks_perkalian)
## [1] 360
# Matriks 2x2
matriks <- matrix(c(4,2,3,1), nrow = 2)
print(matriks)
##      [,1] [,2]
## [1,]    4    3
## [2,]    2    1
det_matriks <- det(matriks)
print(det_matriks)
## [1] -2

Inverse matriks

Invers dari matriks persegi dapat dihitung dengan fungsi solve().

# Matriks 3x3
inv_matriks_perkalian <- solve(matriks_perkalian)
print(inv_matriks_perkalian)
##            [,1]       [,2]       [,3]
## [1,] -0.4416667  0.5000000 -0.2250000
## [2,]  0.8333333 -1.0000000  0.5000000
## [3,] -0.5583333  0.8333333 -0.4416667
# Matriks 2x2
inv_matriks <- solve(matriks)
print(inv_matriks)
##      [,1] [,2]
## [1,] -0.5  1.5
## [2,]  1.0 -2.0

5. Arrays

Array adalah struktur data yang memungkinkan penyimpanan data dalam beberapa dimensi. Setiap elemen dalam array harus memiliki tipe data yang sama, seperti pada vektor dan matriks. Untuk membuat array, kita gunakan fungsi array() dengan menentukan dimensi yang diinginkan.

# Membuat array 3x3x2 -> 3 baris, 3 kolom, dengan 2 lapisan
contoh_array <- array(1:18, dim = c(3, 3, 2))
print(contoh_array)
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
# Membuat array 2x2x2x2 -> 2 baris, 2 kolom, 2 lapisan, dan 2 volume
array_berdimensi <- array(1:16, dim = c(2, 2, 2, 2))
print(array_berdimensi)
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]   13   15
## [2,]   14   16

Untuk mengakses elemen dalam array, kita bisa mengakses elemen dalam array dimana melibatkan penggunaan indeks untuk setiap dimensi. Ada beberapa cara:

Akses elemen tunggal

array_berdimensi <- array(1:16, dim = c(2, 2, 2, 2))

# Mengakses elemen di baris 1, kolom 2, lapisan 2
array_elemen <- array_berdimensi[1, 2, 1, 2]
print(array_elemen)
## [1] 11

Akses Subset dari array

# Mengakses seluruh baris pertama di lapisan pertama
subset_array_berdimensi <- array_berdimensi[1, , 1, ]
print(subset_array_berdimensi)
##      [,1] [,2]
## [1,]    1    9
## [2,]    3   11

Untuk mengubah elemen dalam array, caranya tidak begitu berbeda dengan struktur data sebelum-sebelumnya dengan melakukan assignment.

# Mengubah elemen di baris 1, kolom 2, lapisan 2, volume 2
array_berdimensi[1, 2, 2, 2] <- 99
print(array_berdimensi)
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]    9   11
## [2,]   10   12
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]   13   99
## [2,]   14   16

Beberapa operasi yang umum dilakukan pada array mirip dengan operasi pada matriks. Array dengan dimensi yang sama dapat dijumlahkan atau dikurangkan elemen demi elemen.

# Array kedua
array_kedua <- array(1:16, dim = c(2, 2, 2, 2))

# Penjumlahan array
array_hasil_penjumlahan <- array_berdimensi + array_kedua
print(array_hasil_penjumlahan)
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    2    6
## [2,]    4    8
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]   10   14
## [2,]   12   16
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]   18   22
## [2,]   20   24
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]   26  114
## [2,]   28   32
# Pengurangan array
array_hasil_pengurangan <- array_berdimensi - array_kedua
print(array_hasil_pengurangan)
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    0    0
## [2,]    0    0
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]    0    0
## [2,]    0    0
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]    0    0
## [2,]    0    0
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]    0   84
## [2,]    0    0
# Perkalian array
array_hasil_perkalian <- array_berdimensi * array_kedua
print(array_hasil_perkalian)
## , , 1, 1
## 
##      [,1] [,2]
## [1,]    1    9
## [2,]    4   16
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]   25   49
## [2,]   36   64
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]   81  121
## [2,]  100  144
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]  169 1485
## [2,]  196  256

Selain itu, kita bisa juga mengetahui dimensi dari array dengan menggunakan dim().

dimensi_array <- dim(array_berdimensi)
print(dimensi_array)
## [1] 2 2 2 2

Kita juga bisa mengonversi array ke matriks, vektor, atau list sesuai kebutuhan.

Array ke Matriks

Jika array memiliki dua dimensi, kita bisa mengonversinya langsung ke matriks.

# Mengambil matriks dari array
matriks_array <- array_berdimensi[ , , 1, 1]
print(matriks_array)
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4

Array ke Vektor

Kita dapat mengonversi seluruh array menjadi vektor dengan menggunakan as.vector().

# Konversi array ke vektor
vektor_array <- as.vector(array_berdimensi)
print(vektor_array)
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 99 16

6. Factors

Factor adalah vektor yang menyimpan data kategoris, yang dapat berupa data teks atau angka. Namun, berbeda dengan vektor karakter biasa, faktor juga menyimpan informasi tentang kategori unik yang disebut levels (tingkatan). Factors juga berguna untuk mengategorikan nilai unik dalam kolom seperti “TRUE” atau “FALSE”, “MALE” atau “FEMALE”, dan lain sebagainya. Salah satu struktur data pada R ini berguna dalam analisis data untuk pemodelan statistik. Untuk membuat faktor, kita bisa gunakan factor().

# Membuat faktor dari vektor karakter
sex <- factor(c("Male", "Female", "Female", "Male", "Female"))
print(sex)
## [1] Male   Female Female Male   Female
## Levels: Female Male
# Membuat faktor dengan level tertentu
education <- factor(
  c("SMA", "Sarjana", "Magister", "Sarjana", "Doktoral", "SMA", "Magister"),
  levels = c("SMA", "Sarjana", "Magister", "Doktoral"),
  ordered = TRUE
)

print(education)
## [1] SMA      Sarjana  Magister Sarjana  Doktoral SMA      Magister
## Levels: SMA < Sarjana < Magister < Doktoral

levels menentukan urutan level sedangkan ordered = TRUE menunjukkan bahwa faktor ini memiliki urutan tingkatan tertentu, yang berguna untuk analisis yang melibatkan urutan (misalnya, analisis ordinal).

Untuk mengakses levels dari factor, kita bisa gunakan fungsi levels(). Kita bisa juga mengganti nama level dalam faktor.

levels(sex)
## [1] "Female" "Male"
levels(education)
## [1] "SMA"      "Sarjana"  "Magister" "Doktoral"
# mengubah nama level
levels(sex) <- c("F", "M")
print(sex)
## [1] M F F M F
## Levels: F M

Kita juga bisa menambah atau mengurangi level dengan menggunakan fungsi levels().

# menambah level baru tanpa mengubah data
levels(education) <- c("SD","SMP", "SMA", "Sarjana", "Magister", "Doktoral")
print(education)
## [1] SD      SMP     SMA     SMP     Sarjana SD      SMA    
## Levels: SD < SMP < SMA < Sarjana < Magister < Doktoral
# mengurangi level yang tidak digunakan
education <- factor(education, levels = c("SD","SMP", "SMA"))
print(education)
## [1] SD   SMP  SMA  SMP  <NA> SD   SMA 
## Levels: SD < SMP < SMA

Factor dalam analisis data

Faktor sangat berguna dalam analisis data, terutama dalam model statistik seperti regresi. Misalnya, jika kita ingin menggunakan faktor sebagai variabel prediktor dalam regresi linear.

# Dataset contoh
dataset <- data.frame(
  tinggi = c(170, 155, 165, 190, 180, 175, 185),
  jkel = factor(c("L", "P", "P", "L", "P", "L", "L"))
)

# Model regresi linear
model <- lm(tinggi ~ jkel, data = dataset)

summary(model)
## 
## Call:
## lm(formula = tinggi ~ jkel, data = dataset)
## 
## Residuals:
##       1       2       3       4       5       6       7 
## -10.000 -11.667  -1.667  10.000  13.333  -5.000   5.000 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  180.000      5.323   33.82 4.25e-07 ***
## jkelP        -13.333      8.131   -1.64    0.162    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 10.65 on 5 degrees of freedom
## Multiple R-squared:  0.3497, Adjusted R-squared:  0.2197 
## F-statistic: 2.689 on 1 and 5 DF,  p-value: 0.162

Jika kita lihat hasil summary dari model regresi tersebut, jkelP (jenis kelamin Perempuan) adalah koefisien yang menunjukkan perbedaan dalam tinggi badan antara laki-laki dan perempuan.

Selain itu, kita juga bisa menggunakan faktor untuk mengelompokkan data ke dalam berbagai fungsi statistik.

# Rata-rata tinggi berdasarkan jenis kelamin
mean_height <- tapply(dataset$tinggi, dataset$jkel, mean)
print(mean_height)
##        L        P 
## 180.0000 166.6667

Untuk konversi ke tipe data lain, factor juga memfasilitasi untuk beberapa konversi, seperti karakter dan numerik. Untuk mengonversi faktor menjadi vektor karakter, kita bisa menggunakan as.character() sedangkan untuk numerik, kita bisa menggunakan as.numeric(). Namun, untuk numerik, konversi faktor berdasarkan posisi, bukan nilai asli.

# Konversi faktor ke karakter
sex_char <- as.character(sex)
print(sex_char)
## [1] "M" "F" "F" "M" "F"
# Konversi faktor ke numerik
sex_num <- as.numeric(sex)
print(sex_num)
## [1] 2 1 1 2 1