nama_vector <- c(5,FALSE,"true","8.3","Statistika")
nama_vector
## [1] "5" "FALSE" "true" "8.3" "Statistika"
typeof(nama_vector)
## [1] "character"
Perintah di atas Digunakan untuk membentuk sebuah objek bertipe vector melalui fungsi c() (combine), yang merupakan mekanisme dasar penggabungan elemen di R. Secara konseptual, vector dalam R bersifat homogen, artinya seluruh elemen di dalamnya harus memiliki tipe data yang sama.
Pada saat proses pembentukan vector tersebut, elemen yang dimasukkan memiliki tipe data berbeda, yaitu:
5 bertipe numeric, FALSE bertipe logical, “true”, “8.3”, dan “Statistika” bertipe character
Karena terdapat elemen bertipe character, maka R menerapkan mekanisme otomatis yang disebut implicit type coercion. Dalam sistem hierarki tipe data atomik R, urutan prioritas coercion adalah: logical → integer → double → character. Artinya, jika dalam satu vector terdapat tipe data yang lebih “tinggi” dalam hierarki tersebut, maka seluruh elemen akan dikonversi mengikuti tipe tertinggi yang ada. Dalam kasus ini, karena terdapat elemen character, maka seluruh elemen lainnya (numeric dan logical) dikonversi menjadi character.
Akibatnya: 5 berubah menjadi “5”, FALSE berubah menjadi “FALSE”
contoh_list <- list(5, FALSE, "true", "8.3", "Statistika")
#Menampilkan seluruh elemen list
contoh_list
## [[1]]
## [1] 5
##
## [[2]]
## [1] FALSE
##
## [[3]]
## [1] "true"
##
## [[4]]
## [1] "8.3"
##
## [[5]]
## [1] "Statistika"
# Mengecek tipe data
class(contoh_list)
## [1] "list"
# Mengecek struktur data
str(contoh_list)
## List of 5
## $ : num 5
## $ : logi FALSE
## $ : chr "true"
## $ : chr "8.3"
## $ : chr "Statistika"
Berdasarkan perintah untuk membuat list dengan nama contoh_list yang memiliki elemen sama seperti pada Latihan No.1, diperoleh objek yang berisi nilai 5, FALSE, “true”, “8.3”, dan “Statistika”. Ketika seluruh elemen dipanggil, terlihat bahwa setiap komponen ditampilkan secara terpisah dengan indeks berbentuk [[1]], [[2]], dan seterusnya. Format ini menunjukkan bahwa setiap elemen dalam list disimpan sebagai objek independen.
Dari hasil tersebut dapat diperoleh perbedaan mendasar antara list dan vector di R. Vector bersifat homogen, artinya seluruh elemennya harus memiliki tipe data yang sama. Jika terdapat perbedaan tipe, R akan secara otomatis melakukan implicit type coercion mengikuti hierarki tipe data (logical → integer → numeric → character). Inilah sebabnya pada Latihan No.1 seluruh elemen berubah menjadi tipe character ketika digabungkan dalam sebuah vector.
Sebaliknya, list bersifat heterogen dan tidak menerapkan mekanisme type coercion. Setiap elemen mempertahankan tipe data aslinya. Nilai 5 tetap numeric, FALSE tetap logical, dan nilai bertanda kutip tetap character.
kelompok_kkn <- data.frame(
nama = c("Andi", "Budi", "Alya", "Ibtisam", "Princes",
"Fajar", "Honey", "Hadi", "Alyaku", "Joko"),
nim = c(22001, 22002, 22003, 22004, 22005,
22006, 22007, 22008, 22009, 22010),
prodi = c("PGSD", "Kimia", "IPA", "IPA", "IPA",
"Fisika", "Manajemen", "Biologi", "Farmasi", "Kimia")
)
kelompok_kkn
## nama nim prodi
## 1 Andi 22001 PGSD
## 2 Budi 22002 Kimia
## 3 Alya 22003 IPA
## 4 Ibtisam 22004 IPA
## 5 Princes 22005 IPA
## 6 Fajar 22006 Fisika
## 7 Honey 22007 Manajemen
## 8 Hadi 22008 Biologi
## 9 Alyaku 22009 Farmasi
## 10 Joko 22010 Kimia
#a.Berdasarkan baris tertentu
kelompok_kkn[1, ]
## nama nim prodi
## 1 Andi 22001 PGSD
#b.Mengambil beberapa baris sekaligus
kelompok_kkn[c(2, 4, 6), ]
## nama nim prodi
## 2 Budi 22002 Kimia
## 4 Ibtisam 22004 IPA
## 6 Fajar 22006 Fisika
#c.Mengambil rentang baris
kelompok_kkn[3:7, ]
## nama nim prodi
## 3 Alya 22003 IPA
## 4 Ibtisam 22004 IPA
## 5 Princes 22005 IPA
## 6 Fajar 22006 Fisika
## 7 Honey 22007 Manajemen
#a.Berdasarkan posisi numerik
kelompok_kkn[, 1]
## [1] "Andi" "Budi" "Alya" "Ibtisam" "Princes" "Fajar" "Honey"
## [8] "Hadi" "Alyaku" "Joko"
#b.Mengambil beberapa kolom
kelompok_kkn[, c(1, 3)]
## nama prodi
## 1 Andi PGSD
## 2 Budi Kimia
## 3 Alya IPA
## 4 Ibtisam IPA
## 5 Princes IPA
## 6 Fajar Fisika
## 7 Honey Manajemen
## 8 Hadi Biologi
## 9 Alyaku Farmasi
## 10 Joko Kimia
#c.Berdasarkan nama kolom (string)
kelompok_kkn[, "nama"]
## [1] "Andi" "Budi" "Alya" "Ibtisam" "Princes" "Fajar" "Honey"
## [8] "Hadi" "Alyaku" "Joko"
#d.Menggunakan operator $
kelompok_kkn$nama
## [1] "Andi" "Budi" "Alya" "Ibtisam" "Princes" "Fajar" "Honey"
## [8] "Hadi" "Alyaku" "Joko"
#a.Berdasarkan Indeks Numeric
kelompok_kkn[3, 2]
## [1] 22003
#b.Kombinasi Indeks dan Nama Kolom
kelompok_kkn[4, "prodi"]
## [1] "IPA"
#.Menggunakan which() untuk presisi posisi
kelompok_kkn[which(kelompok_kkn$nama == "Gina"), "nim"]
## numeric(0)
a.kelompok_kkn[1, ] Ekspresi ini menginstruksikan R untuk mengekstraksi observasi pada posisi baris ke-2 tanpa melakukan pembatasan terhadap kolom. Tanda koma tetap harus dituliskan karena R membaca struktur ini sebagai sistem dua indeks. Ketika bagian kolom dibiarkan kosong, R menginterpretasikannya sebagai:
Sertakan seluruh variabel yang tersedia pada baris tersebut.
Output yang dihasilkan tetap berupa data frame satu baris, bukan vektor, karena secara struktural objek tersebut masih memiliki lebih dari satu kolom. Dengan kata lain, dimensi kolom tetap dipertahankan sehingga sifat dua dimensinya tidak hilang.
b.kelompok_kkn[c(2, 4, 6), ] Pada sintaks ini, indeks baris diberikan dalam bentuk vektor numerik. Artinya, R diminta untuk mengambil beberapa observasi yang posisinya telah ditentukan secara eksplisit.
R akan:
Membaca vektor indeks. Mengambil baris sesuai urutan indeks tersebut. Menggabungkannya kembali menjadi satu data frame baru.
c.kelompok_kkn[3:7, ] Sintaks ini berarti: Ambil seluruh observasi dari posisi ke-3 sampai posisi ke-7 secara kontinu
a.kelompok_kkn[, 1]
Ekspresi ini mengambil seluruh baris pada kolom pertama. Berbeda dengan pemanggilan beberapa kolom, hasil dari pemanggilan satu kolom saja akan disederhanakan menjadi vektor satu dimensi. R secara default melakukan penyederhanaan dimensi (dimension dropping) ketika hanya satu kolom yang dipilih. Artinya, struktur dua dimensi hilang dan berubah menjadi struktur linear.
b.kelompok_kkn[, c(1, 3)] Di sini, dua kolom dipilih sekaligus. Karena jumlah kolom lebih dari satu, struktur dua dimensi tetap dipertahankan. Hasilnya berupa data frame baru yang terdiri dari kolom pertama dan ketiga. Pemilihan berbasis indeks numerik seperti ini bersifat sensitif terhadap perubahan urutan kolom. Jika struktur tabel berubah, indeks numerik bisa menunjuk ke variabel yang berbeda.
c.kelompok_kkn[, “nama”] Pendekatan berbasis nama kolom lebih stabil dibanding numerik. R akan mencari kolom dengan label “nama” tanpa memperhatikan posisinya dalam tabel.
d.kelompok_kkn$nama Operator $ merupakan bentuk akses langsung terhadap kolom berdasarkan namanya. Secara teknis:
Menghasilkan vektor. Lebih ringkas. Sangat praktis untuk eksplorasi cepat.
Namun operator ini tidak dapat digunakan untuk memilih lebih dari satu kolom sekaligus, sehingga penggunaannya terbatas pada satu variabel.
a.kelompok_kkn[3, 2] Sintaks ini bekerja seperti koordinat matriks: baris ke-3 dan kolom ke-2. Hasilnya berupa satu nilai tunggal (scalar). Struktur dua dimensi tidak lagi dipertahankan karena hanya satu titik data yang diambil.
b.kelompok_kkn[4, “prodi”] Di sini, baris ditentukan secara numerik dan kolom ditentukan berdasarkan nama. Kombinasi ini meningkatkan keterbacaan karena kolom yang dituju jelas secara semantik.
c.kelompok_kkn[which(kelompok_kkn$nama == “Gina”), “nim”] Sintaks ini menunjukkan seleksi berbasis kondisi.
Tahapan logis yang terjadi: 1.kelompok_kkn$nama == “Gina” menghasilkan vektor logika. 2.which() mengonversi nilai TRUE menjadi indeks numerik. 3.Indeks tersebut digunakan untuk mengambil nilai pada kolom “nim”.
data_mahasiswa <- data.frame(
nama = c("Andi","Budi","Alya","Ibtisam","Princes",
"Fajar","Lia","Hadi","Alya","Joko"),
nim = c(22001,22002,NA,22004,22005,
22006,NA,22008,22009,22010),
prodi = c("Hukum","DKV","IPA",NA,"Statistika",
"Farmasi","Fisika","Kimia",NA,"Informatika"),
ipk = c(3.5,NA,3.8,3.2,NA,
3.6,3.9,3.1,NA,3.7),
stringsAsFactors = FALSE
)
data_mahasiswa
## nama nim prodi ipk
## 1 Andi 22001 Hukum 3.5
## 2 Budi 22002 DKV NA
## 3 Alya NA IPA 3.8
## 4 Ibtisam 22004 <NA> 3.2
## 5 Princes 22005 Statistika NA
## 6 Fajar 22006 Farmasi 3.6
## 7 Lia NA Fisika 3.9
## 8 Hadi 22008 Kimia 3.1
## 9 Alya 22009 <NA> NA
## 10 Joko 22010 Informatika 3.7
na_matrix <- is.na(data_mahasiswa)
na_matrix
## nama nim prodi ipk
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE TRUE
## [3,] FALSE TRUE FALSE FALSE
## [4,] FALSE FALSE TRUE FALSE
## [5,] FALSE FALSE FALSE TRUE
## [6,] FALSE FALSE FALSE FALSE
## [7,] FALSE TRUE FALSE FALSE
## [8,] FALSE FALSE FALSE FALSE
## [9,] FALSE FALSE TRUE TRUE
## [10,] FALSE FALSE FALSE FALSE
sum(na_matrix)
## [1] 7
Objek data_mahasiswa dibangun sebagai sebuah data.frame yang berisi empat variabel utama: nama, nim, prodi, dan ipk. Secara struktur, ini adalah tabel dua dimensi dengan 10 observasi. Beberapa nilai sengaja dibiarkan kosong menggunakan NA, yang dalam R merepresentasikan missing value, bukan nol, bukan string kosong, dan bukan nilai yang salah — tetapi benar-benar nilai yang tidak tersedia. Keputusan menggunakan stringsAsFactors = FALSE juga penting secara teknis. Artinya, kolom karakter seperti nama dan prodi dipertahankan sebagai tipe character, bukan otomatis diubah menjadi factor. Ini membuat manipulasi teks lebih fleksibel dan menghindari konversi level yang sering menjadi sumber masalah dalam analisis lanjutan.
Fungsi is.na() tidak menghapus atau memperbaiki data, tetapi membuat representasi logika dari struktur yang sama. Setiap sel pada data frame dikonversi menjadi: 1.TRUE jika nilainya NA, 2.FALSE jika nilainya terisi.
Hasilnya adalah sebuah matriks logika dengan dimensi yang identik dengan data aslinya (10 × 4). Ini penting: struktur dipertahankan agar posisi missing tetap bisa dilacak secara presisi. Secara praktik, pendekatan ini mencerminkan tahap audit data. Sebelum melakukan analisis statistik, seorang analis yang berpengalaman tidak langsung menghitung rata-rata atau membangun model. Langkah pertama selalu memastikan integritas dan kelengkapan data.
Karena TRUE dalam konteks numerik bernilai 1 dan FALSE bernilai 0, fungsi sum() akan menghitung total nilai TRUE, yang berarti total seluruh missing value di dalam dataset.
Berdasarkan struktur data: 1.Kolom nim memiliki 2 NA, 2.Kolom prodi memiliki 2 NA, 3.Kolom ipk memiliki 3 NA, Total keseluruhan missing value = 7
Ini bukan sekadar angka. Angka tersebut menggambarkan bahwa 7 dari total 40 sel data (10 baris × 4 kolom) tidak terisi. Secara proporsional, sekitar 17,5% data tidak lengkap.