nama_vector <- c(5, FALSE, "true", "8.3", "Statistika")
nama_vector
## [1] "5" "FALSE" "true" "8.3" "Statistika"
str(nama_vector)
## chr [1:5] "5" "FALSE" "true" "8.3" "Statistika"
class(nama_vector)
## [1] "character"
Fungsi c() (combine) di R digunakan untuk membentuk
atomic vector.
Sifat utama atomic vector adalah: semua elemen harus memiliki tipe data yang sama (homogen). Karena elemen-elemen yang dimasukkan terdiri dari beberapa tipe data berbeda:
5 → numericFALSE → logical"true" → character"8.3" → character"Statistika" → charactermaka R akan melakukan type coercion otomatis ke tipe data yang paling “tinggi” dalam hierarki coercion (logical → integer → numeric → character). Karena terdapat elemen bertipe character, seluruh elemen dipaksa menjadi character.
Kesimpulan Nomor 1
nama_vector adalah atomic vector bertipe
character5 dan logical FALSE berubah
menjadi string "5" dan "FALSE"length(nama_vector) = 5)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"
str(contoh_list)
## List of 5
## $ : num 5
## $ : logi FALSE
## $ : chr "true"
## $ : num 8.3
## $ : chr "Statistika"
Perbedaan List dan Vektor
| Aspek | Vector | List |
|---|---|---|
| Homogenitas | Harus 1 tipe data | Bisa berbeda tipe |
| Coercion | Terjadi otomatis | Tidak terjadi |
| Struktur | Atomic | Recursive |
| Akses elemen | [] |
[] dan [[]] |
| Fleksibilitas | Terbatas | Sangat fleksibel |
Kesimpulan Nomor 2
5
dan 8.3 tetap numeric, logical FALSE tetap
logical).kelompok_kkn <- data.frame(
nama = c("Messi", "Ronaldo", "Neymar", "Modric",
"Kroos", "Vitinha", "Marcelo", "Ramos",
"Mbappe", "Ronaldinho"),
nim = c("1234567891", "1234567892", "1234567893", "1234567894",
"1234567895", "1234567896", "1234567897", "1234567898",
"1234567899", "1234567800"),
prodi = c("Staterkom", "SSD", "Akuntansi", "Manajemen",
"SeniBahasa", "SeniTari", "SeniMusik", "Psikologi",
"HukumPidana", "Informatika"),
stringsAsFactors = FALSE
)
kelompok_kkn
## nama nim prodi
## 1 Messi 1234567891 Staterkom
## 2 Ronaldo 1234567892 SSD
## 3 Neymar 1234567893 Akuntansi
## 4 Modric 1234567894 Manajemen
## 5 Kroos 1234567895 SeniBahasa
## 6 Vitinha 1234567896 SeniTari
## 7 Marcelo 1234567897 SeniMusik
## 8 Ramos 1234567898 Psikologi
## 9 Mbappe 1234567899 HukumPidana
## 10 Ronaldinho 1234567800 Informatika
data.frame() digunakan untuk membentuk struktur data
tabular dua dimensi, di mana setiap kolom dapat memiliki tipe data
berbeda (numeric, character, dsb), namun panjang setiap kolom harus
sama. Argumen stringsAsFactors = FALSE memastikan kolom
karakter (nama, nim, prodi) tetap
disimpan sebagai character, bukan dikonversi otomatis menjadi
factor.
kelompok_kkn$nama
## [1] "Messi" "Ronaldo" "Neymar" "Modric" "Kroos"
## [6] "Vitinha" "Marcelo" "Ramos" "Mbappe" "Ronaldinho"
Operator $ digunakan untuk mengakses satu kolom dari
data frame berdasarkan nama kolomnya secara langsung, dan akan
mengembalikan kolom tersebut dalam bentuk vector.
kelompok_kkn[1:5, ]
## nama nim prodi
## 1 Messi 1234567891 Staterkom
## 2 Ronaldo 1234567892 SSD
## 3 Neymar 1234567893 Akuntansi
## 4 Modric 1234567894 Manajemen
## 5 Kroos 1234567895 SeniBahasa
Notasi [baris, kolom] digunakan untuk melakukan
indexing pada data frame. Karena posisi kolom dikosongkan, R
akan menampilkan seluruh kolom untuk baris ke-1 sampai
ke-5 sesuai rentang 1:5.
kelompok_kkn[, c("nama", "prodi")]
## nama prodi
## 1 Messi Staterkom
## 2 Ronaldo SSD
## 3 Neymar Akuntansi
## 4 Modric Manajemen
## 5 Kroos SeniBahasa
## 6 Vitinha SeniTari
## 7 Marcelo SeniMusik
## 8 Ramos Psikologi
## 9 Mbappe HukumPidana
## 10 Ronaldinho Informatika
Dengan mengosongkan posisi baris dan menuliskan nama-nama kolom dalam
bentuk vector character pada posisi kolom, R akan menampilkan
seluruh baris namun hanya untuk kolom nama
dan prodi saja.
kelompok_kkn[3, "nim"]
## [1] "1234567893"
Notasi ini mengambil elemen spesifik pada baris ke-3 dan kolom
nim, sehingga hasil yang dikembalikan adalah satu nilai
tunggal, yaitu NIM dari anggota kelompok pada baris ketiga (Neymar).
Kesimpulan Nomor 3
data.frame cocok digunakan untuk merepresentasikan data
tabular dengan kolom-kolom yang memiliki tipe data berbeda.$ untuk satu kolom, [baris, ] untuk satu/lebih
baris, [, "nama_kolom"] untuk satu/lebih kolom, dan
[baris, kolom] untuk elemen spesifik.data_na <- data.frame(
id = 1:10,
nilai = c(85, NA, 78, 92, NA, 88, 95, NA, 80, 87),
status = c("Lulus", NA, "Lulus", "Lulus", NA, "Lulus", "Lulus", NA, "Lulus", "Lulus")
)
data_na
## id nilai status
## 1 1 85 Lulus
## 2 2 NA <NA>
## 3 3 78 Lulus
## 4 4 92 Lulus
## 5 5 NA <NA>
## 6 6 88 Lulus
## 7 7 95 Lulus
## 8 8 NA <NA>
## 9 9 80 Lulus
## 10 10 87 Lulus
# Mendeteksi posisi NA
is.na(data_na)
## id nilai status
## [1,] FALSE FALSE FALSE
## [2,] FALSE TRUE TRUE
## [3,] FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE
## [5,] FALSE TRUE TRUE
## [6,] FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE
## [8,] FALSE TRUE TRUE
## [9,] FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE
is.na() digunakan untuk mendeteksi keberadaan
missing value (NA) pada setiap elemen data frame,
dan mengembalikan matriks logika berukuran sama dengan data frame asal,
di mana TRUE menandakan elemen tersebut adalah
NA.
colSums(is.na(data_na))
## id nilai status
## 0 3 3
colSums(is.na(data_na)) menghitung jumlah nilai
NA pada setiap kolom dengan cara
menjumlahkan nilai logika TRUE (dianggap 1) hasil dari
is.na() per kolom. Dari hasil ini terlihat bahwa kolom
nilai dan status masing-masing memiliki nilai
yang hilang.
data_na[rowSums(is.na(data_na)) > 0, ]
## id nilai status
## 2 2 NA <NA>
## 5 5 NA <NA>
## 8 8 NA <NA>
rowSums(is.na(data_na)) > 0 menghasilkan vector
logika yang bernilai TRUE untuk setiap baris yang
mengandung minimal satu nilai NA. Vector
logika ini kemudian digunakan untuk melakukan filtering baris pada
data_na, sehingga hanya baris-baris yang mengandung missing
value yang ditampilkan.
Beberapa hal penting terkait missing value di R: NA
adalah representasi missing value, is.na() selalu
mengembalikan nilai logika (TRUE/FALSE),
missing value (NA) berbeda dengan string kosong
(""), dan operasi aritmatika yang melibatkan
NA akan menghasilkan NA kecuali ditangani
dengan argumen na.rm = TRUE (misalnya pada
mean(data_na$nilai, na.rm = TRUE)).
Kesimpulan Nomor 4
is.na() adalah fungsi dasar untuk mendeteksi missing
value secara elemen-per-elemen.colSums(is.na(df)) berguna untuk melihat ringkasan
jumlah NA per kolom, membantu mengidentifikasi kolom mana yang paling
banyak memiliki data hilang.rowSums(is.na(df)) > 0 berguna untuk menyaring
baris-baris bermasalah agar dapat ditangani lebih lanjut (misalnya
dihapus dengan na.omit() atau diimputasi).Keempat nomor pada praktikum ini saling berkaitan dan membentuk pemahaman bertahap mengenai struktur data dasar di R, mulai dari level satu dimensi hingga manipulasi data tabular.
Nomor 1 dan Nomor 2 sama-sama menggunakan lima elemen dengan tipe
data yang berbeda-beda, namun dibungkus dengan struktur yang berbeda
(c() vs list()). Perbandingan ini
memperlihatkan perbedaan paling mendasar antara atomic
vector yang homogen dan list yang heterogen,
sekaligus menjadi dasar untuk memahami mengapa data.frame
(yang sebenarnya adalah list dari vector-vector dengan panjang sama)
bisa menampung kolom dengan tipe data berbeda namun tetap homogen di
dalam masing-masing kolomnya.
Nomor 3 membawa konsep tersebut ke struktur dua dimensi melalui
data.frame, sekaligus memperkenalkan berbagai teknik
indexing ($, [baris, ],
[, kolom], [baris, kolom]) yang menjadi
keterampilan dasar untuk mengeksplorasi dan mengambil bagian tertentu
dari suatu dataset.
Nomor 4 melanjutkan pembahasan data.frame dengan
menambahkan permasalahan yang sangat umum dijumpai dalam data nyata,
yaitu missing value. Teknik is.na(),
colSums(), dan rowSums() yang dipelajari di
sini merupakan langkah awal yang penting sebelum melakukan pembersihan
data (data cleaning) lebih lanjut, seperti penghapusan baris
(na.omit()) atau imputasi nilai yang hilang.
Secara keseluruhan, praktikum ini menunjukkan bahwa:
data.frame merupakan struktur yang paling relevan untuk
analisis data statistika, karena mampu menampung kolom-kolom dengan tipe
berbeda sekaligus tetap terorganisir dalam bentuk tabel.