Dokumen ini membahas dasar-dasar pemrograman R yang menjadi fondasi penting dalam analisis data statistika. Pembahasan mencakup pengenalan berbagai struktur data utama dalam R, yaitu vektor, list, dan data frame, beserta perbedaan karakteristik dan cara penggunaannya. Selain itu, dokumen ini juga membahas penanganan missing value (NA) mulai dari identifikasi, pencarian posisi, hingga perhitungan jumlah data yang hilang. Melalui eksplorasi ini, pembaca diharapkan mampu memahami cara kerja struktur data di R serta menerapkannya dalam pengolahan data secara sistematis.
Diketahui: Terdapat elemen 5,
FALSE, "true", "8.3",
"Statistika" yang akan dibuat menjadi sebuah vector.
Ditanya: Ketikkan perintah berikut dan berikan pernyataan yang dapat diperoleh.
Dijawab:
nama_vector <- c(5, FALSE, "true", "8.3", "Statistika")
nama_vector
## [1] "5" "FALSE" "true" "8.3" "Statistika"
Dari output di atas, dapat diperoleh beberapa pernyataan berikut:
1. Semua elemen berubah menjadi tipe character
Vektor dalam R bersifat atomic, artinya hanya dapat menyimpan satu tipe data. Ketika elemen dengan tipe berbeda dimasukkan sekaligus, R secara otomatis melakukan type coercion atau memaksa semua elemen mengikuti tipe data dengan prioritas tertinggi.
Hierarki prioritas tipe data di R: logical ->
integer -> double ->
complex -> character
Karena terdapat elemen bertipe character
("true", "8.3", "Statistika"),
seluruh elemen dipaksa menjadi character, sehingga:
5 (numeric) → "5" (character)FALSE (logical) → "FALSE" (character)2. FALSE ≠ “true” secara logika
FALSE tanpa tanda kutip adalah nilai logika bawaan R,
sedangkan "true" dengan tanda kutip adalah string biasa.
Setelah coercion, keduanya hanya berupa teks biasa.
3. Operasi matematis tidak bisa dilakukan
nama_vector[1] + 1 # Error karena "5" sudah bertipe character
## Error in nama_vector[1] + 1: non-numeric argument to binary operator
Diketahui: Elemen yang digunakan sama dengan Latihan No. 1.
Ditanya: Buat list bernama contoh_list,
panggil seluruh elemennya, dan jelaskan perbedaan list dengan
vector.
Dijawab:
1. Membuat dan memanggil
contoh_list
contoh_list <- list(5, FALSE, "true", "8.3", "Statistika")
contoh_list
## [[1]]
## [1] 5
##
## [[2]]
## [1] FALSE
##
## [[3]]
## [1] "true"
##
## [[4]]
## [1] "8.3"
##
## [[5]]
## [1] "Statistika"
2. Pemanggilan elemen menggunakan index
[[ ]]
contoh_list[[1]] # elemen pertama
## [1] 5
contoh_list[[2]] # elemen kedua
## [1] FALSE
contoh_list[[3]] # elemen ketiga
## [1] "true"
contoh_list[[4]] # elemen keempat
## [1] "8.3"
contoh_list[[5]] # elemen kelima
## [1] "Statistika"
3. Verifikasi tipe data tiap elemen
class(contoh_list[[1]]) # numeric
## [1] "numeric"
class(contoh_list[[2]]) # logical
## [1] "logical"
class(contoh_list[[3]]) # character
## [1] "character"
4. Perbedaan List dan Vector
| Aspek | Vector | List |
|---|---|---|
| Tipe data | Harus sama (satu tipe) | Boleh berbeda |
| Type coercion | Ya, otomatis | Tidak |
| Akses elemen | vector[1] |
list[[1]] atau list$nama |
| Fleksibilitas | Terbatas | Sangat fleksibel |
Kesimpulan: List bersifat heterogen yaitu mampu menyimpan elemen dengan tipe data berbeda tanpa mengubah tipe aslinya. Sebaliknya, vector bersifat homogen yang artinya seluruh elemen dipaksa menjadi satu tipe data mengikuti hierarki prioritas tipe di R.
Diketahui: Akan dibuat sebuah data frame dengan nama
kelompok_kkn yang terdiri dari tiga kolom:
nama, nim, dan prodi, dengan
minimal 10 baris data.
Ditanya:
kelompok_kkn dengan minimal 10
barisDijawab:
1. Membuat Data Frame kelompok_kkn
kelompok_kkn <- data.frame(
nama = c("Andi", "Budi", "Citra", "Dewi", "Eka",
"Fani", "Gita", "Hadi", "Iwan", "Joko"),
nim = c("2304010001", "2304030002", "2304070003", "2304010004", "2304090005",
"2304110006", "2304010007", "2304030008", "2304070009", "2304090010"),
prodi = c("Statistika", "Matematika", "Fisika", "Statistika", "Kimia",
"Biologi", "Statistika", "Matematika", "Fisika", "Kimia")
)
kelompok_kkn
## nama nim prodi
## 1 Andi 2304010001 Statistika
## 2 Budi 2304030002 Matematika
## 3 Citra 2304070003 Fisika
## 4 Dewi 2304010004 Statistika
## 5 Eka 2304090005 Kimia
## 6 Fani 2304110006 Biologi
## 7 Gita 2304010007 Statistika
## 8 Hadi 2304030008 Matematika
## 9 Iwan 2304070009 Fisika
## 10 Joko 2304090010 Kimia
2. Eksperimen Pemanggilan Isi Tabel
a. Pemanggilan Baris
kelompok_kkn[1, ] # memanggil baris ke-1
## nama nim prodi
## 1 Andi 2304010001 Statistika
kelompok_kkn[3, ] # memanggil baris ke-3
## nama nim prodi
## 3 Citra 2304070003 Fisika
kelompok_kkn[1:5, ] # memanggil baris ke-1 sampai ke-5
## nama nim prodi
## 1 Andi 2304010001 Statistika
## 2 Budi 2304030002 Matematika
## 3 Citra 2304070003 Fisika
## 4 Dewi 2304010004 Statistika
## 5 Eka 2304090005 Kimia
b. Pemanggilan Kolom
kelompok_kkn[, 1] # memanggil kolom ke-1 (by index)
## [1] "Andi" "Budi" "Citra" "Dewi" "Eka" "Fani" "Gita" "Hadi" "Iwan"
## [10] "Joko"
kelompok_kkn[, "nama"] # memanggil kolom nama (by nama kolom)
## [1] "Andi" "Budi" "Citra" "Dewi" "Eka" "Fani" "Gita" "Hadi" "Iwan"
## [10] "Joko"
kelompok_kkn$nim # memanggil kolom nim (operator $)
## [1] "2304010001" "2304030002" "2304070003" "2304010004" "2304090005"
## [6] "2304110006" "2304010007" "2304030008" "2304070009" "2304090010"
kelompok_kkn$prodi # memanggil kolom prodi (operator $)
## [1] "Statistika" "Matematika" "Fisika" "Statistika" "Kimia"
## [6] "Biologi" "Statistika" "Matematika" "Fisika" "Kimia"
c. Pemanggilan Elemen Spesifik
kelompok_kkn[2, 1] # elemen baris 2, kolom 1
## [1] "Budi"
kelompok_kkn[5, "prodi"] # elemen baris 5, kolom prodi
## [1] "Kimia"
kelompok_kkn[3, 3] # elemen baris 3, kolom 3
## [1] "Fisika"
3. Perbedaan Cara Pemanggilan
| Cara | Syntax | Keterangan |
|---|---|---|
| By index baris | df[1, ] |
Kosong setelah koma = semua kolom |
| By index kolom | df[, 1] |
Kosong sebelum koma = semua baris |
| By nama kolom | df[, "nama"] |
Lebih mudah dibaca |
Operator $ |
df$nama |
Paling umum digunakan |
| Elemen spesifik | df[2, 1] |
Baris dan kolom ditentukan |
Kesimpulan: Pemanggilan dengan [ , ]
lebih fleksibel karena bisa mengakses baris, kolom, maupun elemen secara
bersamaan. Operator $ lebih praktis namun hanya bisa
mengakses satu kolom berdasarkan namanya.
Diketahui: Akan dibuat sebuah data frame yang beberapa datanya berupa missing value (NA).
Ditanya:
is.na()Dijawab:
1. Membuat Data Frame dengan Missing Value
df_na <- data.frame(
nama = c("Andi", "Budi", "Citra", "Dewi", "Eka",
"Fani", "Gita", "Hadi", "Iwan", "Joko"),
nilai = c(80, NA, 75, NA, 90, 85, NA, 78, 88, NA),
usia = c(20, 21, NA, 22, 20, NA, 23, 21, NA, 22)
)
df_na
## nama nilai usia
## 1 Andi 80 20
## 2 Budi NA 21
## 3 Citra 75 NA
## 4 Dewi NA 22
## 5 Eka 90 20
## 6 Fani 85 NA
## 7 Gita NA 23
## 8 Hadi 78 21
## 9 Iwan 88 NA
## 10 Joko NA 22
2. Mengecek Keberadaan Missing Value
is.na(df_na)
## nama nilai usia
## [1,] FALSE FALSE FALSE
## [2,] FALSE TRUE FALSE
## [3,] FALSE FALSE TRUE
## [4,] FALSE TRUE FALSE
## [5,] FALSE FALSE FALSE
## [6,] FALSE FALSE TRUE
## [7,] FALSE TRUE FALSE
## [8,] FALSE FALSE FALSE
## [9,] FALSE FALSE TRUE
## [10,] FALSE TRUE FALSE
3. Mencari Posisi Missing Value per Kolom
which(is.na(df_na$nilai)) # posisi NA di baris ke-berapa pada kolom nilai
## [1] 2 4 7 10
which(is.na(df_na$usia)) # posisi NA di baris ke-berapa pada kolom usia
## [1] 3 6 9
4. Menghitung Total Missing Value
sum(is.na(df_na$nilai)) # total NA pada kolom nilai
## [1] 4
sum(is.na(df_na$usia)) # total NA pada kolom usia
## [1] 3
sum(is.na(df_na)) # total NA seluruh data frame
## [1] 7
5. Menampilkan Baris yang Mengandung Missing Value
df_na[!complete.cases(df_na), ]
## nama nilai usia
## 2 Budi NA 21
## 3 Citra 75 NA
## 4 Dewi NA 22
## 6 Fani 85 NA
## 7 Gita NA 23
## 9 Iwan 88 NA
## 10 Joko NA 22
Kesimpulan: Fungsi is.na() menghasilkan
matriks logika TRUE/FALSE untuk seluruh elemen data frame.
Fungsi which(is.na()) menampilkan indeks
baris yang mengandung NA sehingga lebih mudah menemukan lokasi
data hilang. Fungsi complete.cases() melengkapi keduanya
dengan menampilkan baris yang tidak lengkap datanya.
Referensi:
Wickham, H. & Grolemund, G. (2017). R for Data Science.
O’Reilly Media. https://r4ds.had.co.nz/vectors.html