Bab 7 Vektor, Matriks, dan Dataframe


7.1 Tujuan Pembelajaran

CPMK 7

Mahasiswa mampu memahami tipe data vektor, matriks, dan dataframe dan menerapkannya untuk analisis data dalam R.

Sub-CPMK 7

Mahasiswa mampu menggunakan tipe data vektor, matriks, dan dataframe dan menganalisisnya dalam R.

Deskripsi Isi Bahan Ajar

Bab 7 ini membahas tentang:

  1. Vektor.
  2. Matriks.
  3. Dataframe.

Waktu Pembelajaran

Alokasi Waktu = 3 x 50 menit (3 SKS)

Kegiatan Alokasi Waktu
Ceramah dan Diskusi Interaktif 20 menit
Praktik Vektor, Matriks, Dataframe 50 menit
Konsultasi Praktik R 50 menit
Presentasi individu 30 menit

Petunjuk Penggunaan Bahan Ajar

  1. Langkah-langkah pembelajaran.
    Pelajari struktur data vektor dan matriks untuk mengeksplorasi struktur data lanjut yaitu dataframe. Terapkan pengetahuan Anda pada contoh-contoh kasus yang telah disajikan secara individu kolaboratif. Konsultasikanlah kesulitan Anda selama praktik pada pengajar mata kuliah ini. Anda bisa bekerja dengan IDE RStudio secara offline maupun online.

  2. Sumber Belajar yang Dibutuhkan.
    Laptop (Notebook), jaringan internet

Tujuan Akhir (Performance Objective)

Setelah menyelesaikan modul ini, mahasiswa mampu memahami struktur data vektor, matriks, dan dataframe dalam R.

7.2 Pendahuluan

Pada bab sebelumnya kita telah mempelajari struktur data array dan list. Kita telah bisa untuk membuat, memperbarui, menghapus isi data dari array dan list dengan fungsi bawaan R. Pada bab ini, kita akan mengeksplorasi struktur data yang akan sering digunakan untuk analisis data yaitu dataframe. Sebelum masuk ke dataframe, dasar mengenai struktur data vektor dan matriks akan kita perdalam kembali.

Dalam bahasa pemrograman apapun, kita memiliki variabel yang berbeda-beda untuk menyimpan data. Variabel disimpan dalam alokasi memori komputer dalam menyimpan nilai data. Hal ini juga berarti ketika kita membuat sebuah variabel, kita menggunakan sejumlah area di dalam memori penyimpanan. Struktur data adalah cara kita untuk mengelola data sehingga data bisa kita olah kembali secara efisien di dalam komputer.

Seperti yang pernah di jelaskan, R berbeda dengan bahasa pemrograman populer lainnya seperti C dan Java. Alasannya adalah R tidak perlu mendeklarasikan tipe data di awal pemrograman. Selain itu, variabel dinamakan dengan objek R, bentuk pengetahuan dari objek R menjadi tipe data dari variabel tersebut.

Terdapat beberapa jenis dari objek R. Yang paling digunakan antara lain:

  • Vector
  • Matrix
  • Array
  • List
  • Dataframe

Kita ketahui bahwa variabel itu seperti segmen, dan sejauh ini, kita melihat bahwa segmen diisi dengan satu nilai. Bahkan ketika angka itu dibuat, hasil dari operasi matematika adalah satu nilai. Padahal variabel R dapat menyimpan lebih dari satu nilai (data). Bahkan variabel dapat menyimpan sejumlah besar struktur data yang berbeda. Untuk merealisasikan ini R memfasilitasi tipe data vektor (c), faktor, matriks (matrix), data frame (data.frame), dan list (list).

7.3 Vektor

Vektor adalah salah satu tipe data yang ada di dalam R. Dia menyimpan elemen data dengan tipe yang sama. Tipe data yang bisa disimpan dapat berupa Boolean (TRUE/ FALSE), integer, double, character, compex, atau raw. Sebuah tipe data vektor dapat diperiksa dengan fungsi bawaan typeof(). Sifat lain dari vektor juga adalah panjangnya. Panjang vektor adalah jumlah elemen data yang terkandung dalam vektor yang dapat dicari dengan fungsi length(). Vektor adalah objek data R yang paling dasar, dan terdapat empat tipe vektor atomik antara lain character, logical, numeric, dan integer.

Ketika kita hanya menulis suatu nilai di dalam R, ini adalah sebuah vektor dengan panjang 1 dan termasuk salah satu tipe vektor.

Membuat Vektor

Seperti yang pernah didiskusikan sebelumnya, vektor dapat dibuat dengan fungsi c(). Karena vektor harus memiliki elemen dari tipe data yang sama, fungsi c() akan mencoba dan memaksa (koersi) elemen yang dimasukkan memiliki tipe data yang sama jika ada yang berbeda. Urutan konversi data dari tipe data rendah ke tinggi dan dari logical ke integer ke double ke character.

Contoh:

x <- c(11, 55, 44, 99, 00)
typeof(x)
## [1] "double"
length(x)
## [1] 5
x <- c(11, 54, TRUE, "R Programming")
typeof(x)
## [1] "character"

Vektor juga bisa dibuat dengan fungsi seq() dan operator :.

Fungsi seq() akan membuat urutan nilai dengan rentang yang telah ditetapkan dalam argumen “by”.

Contoh:

x <- seq(0, 20, by = 2)
x
##  [1]  0  2  4  6  8 10 12 14 16 18 20

Kita juga bisa menentukan panjang vektor yang dibuat dengan fungsi seq() dengan argumen “length.out”.

x <- seq(0, 20, length.out = 6)
x
## [1]  0  4  8 12 16 20

Vektor juga dapat dibuat dengan operator :. Dengan operator ini, vektor akan membuat nilai yang kontinyu.

Contoh:

x <- 1:12
x
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12

Beberapa Tipe Vektor

Vektor adalah struktur data umum dan dasar di R dan merupakan tulang punggung R. Pada dasarnya, vektor hanyalah kumpulan nilai, terutama berupa angka.

Vektor Numerik

Contoh:

v1 <- c(14, 15, 16, 17)
typeof(v1)
## [1] "double"
v2 <- c(11L, 44L, 22L, 55L)
typeof(v2)
## [1] "integer"

Vektor Karakter

Contoh:

v1 <- c(' R Programming ', '2', 'Vectors', 57)
typeof(v1)
## [1] "character"

Vektor Logika

Contoh:

v1 <- c(TRUE, FALSE, TRUE, NA)
typeof(v1)
## [1] "logical"

Mengakses Elemen Vektor

Seperti yang pernah kita pelajari dalam Array dan List, kita menggunakan kurung tegak ([]) dalam mengakses elemen dari objek vektor. Indeks yang diisi dalam kurung tegak ini adalah lokasi elemen berada.

Contoh:

x <- c(11, 55, 44, 99, 00)
x[4]
## [1] 99

7.4 Matriks

Matriks adalah struktur data dua dimensi dalam bahasa pemrograman R. Matriks mirip seperti vektor, perbedaanya adalah dalam hal atribut dimensi. Semua atribut dari objek R dapat diperiksa dengan fungsi attributes().

Contoh:

matrix(1:9, nrow = 3, ncol = 3)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

Kita dapat memberi nama baris dan kolom matriks dengan membuat “list” pada argumen “dimnames”.

Contoh:

x <- matrix(1:9, nrow = 3, dimnames = list(c("X","Y","Z"), c("A","B","C")))
colnames(x)
## [1] "A" "B" "C"
rownames(x)
## [1] "X" "Y" "Z"
attributes(x)
## $dim
## [1] 3 3
## 
## $dimnames
## $dimnames[[1]]
## [1] "X" "Y" "Z"
## 
## $dimnames[[2]]
## [1] "A" "B" "C"

Kita juga bisa membuat matriks dengan fungsi cbind() dan rbind().

Contoh:

cbind(c(11, 22, 33),c(44, 55, 66))
##      [,1] [,2]
## [1,]   11   44
## [2,]   22   55
## [3,]   33   66
rbind(c(01, 02, 03),c(04, 05, 06))
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

Mengakses Elemen Matriks

Kita bisa mengakses elemen matriks dengan kurung siku [] dan nilai indeks data yang ingin diakses. Elemen matriks dapat diakses dengan sintaks var[raw, column].

Contoh:

x <- matrix(1:9, nrow = 3, dimnames = list(c("X","Y","Z"), c("A","B","C")))

x[c(1,2), c(2,3)]
##   B C
## X 4 7
## Y 5 8

Kita juga bisa mengakses elemen matriks dengan indexing.

x[1:4]
## [1] 1 2 3 4

7.5 Dataframe

Dataframe adalah struktur array dua dimensi dimana setiap kolom bisa mengandung tipe data berbeda-beda, dan setiap baris berisi rekaman nilai data dari setiap kolom. Berikut ini adalah karakteristik dari dataframe.

  • Nama kolom tidak boleh kosong.
  • Nama baris harus unik (tidak ada yang sama).
  • Data yang tersimpan dalam datafram harus numeric, factor, logical, atau character.
  • Setiap kolom memiliki jumlah baris data yang sama.

Membuat Dataframe di R

Kita bisa membuat dataframe dengan vektor dan digabungkan dengan fungsi data.frame().

Contoh:

nama_siswa <- c("Amy", "Bob", "Chuck", "Daisy", "Ellie", "Frank", "George", "Helen")
umur <- c(27, 55, 34, 42, 20, 27, 34, 42)
gender <- c("F", "M", "M", "F", "F", "M", "M", "F")
ipk <- c(3.26, 3.75, 2.98, 3.40, 2.75, 3.32, 3.68, 3.97)

df_mahasiswa <- data.frame(nama_siswa, umur, gender, ipk)
df_mahasiswa
##   nama_siswa umur gender  ipk
## 1        Amy   27      F 3.26
## 2        Bob   55      M 3.75
## 3      Chuck   34      M 2.98
## 4      Daisy   42      F 3.40
## 5      Ellie   20      F 2.75
## 6      Frank   27      M 3.32
## 7     George   34      M 3.68
## 8      Helen   42      F 3.97

Untuk memeriksa tipe objek apakah dataframe atau bukan bisa menggunakan fungsi class().

class(df_mahasiswa)
## [1] "data.frame"

Mengakses Elemen Dataframe

Sama seperti array dan matriks sebelumnya, kita bisa mengakses elemen dataframe dengan sintaks var[row,column]. Contohnya disini kita ingin menampilkan nama “Chuck” dari dataset df_mahasiswa.

Contoh:

Data nama “Chuck” terletak di baris ke- 3 dan kolom ke- 1

df_mahasiswa[3,1]
## [1] "Chuck"

Cara lain kita bisa mengakses kolom tertentu dengan “[]”, “[[]]”, atau dengan “$”. Misalnya disini kita ingin mengakses data “gender”.

Contoh:

df_mahasiswa[3]
##   gender
## 1      F
## 2      M
## 3      M
## 4      F
## 5      F
## 6      M
## 7      M
## 8      F
df_mahasiswa[["gender"]]
## [1] "F" "M" "M" "F" "F" "M" "M" "F"
df_mahasiswa$gender
## [1] "F" "M" "M" "F" "F" "M" "M" "F"

Menggabungkan (Update) Dataframe

Kita bisa menggabungkan dataframe secara baris (vertikal) atau secara kolom (horizontal). Secara baris kita gunakan fungsi rbind() dan secara kolom kita gunakan fungsi cbind().

Contoh:

df1 <- data.frame (
  Name = c("Juan", "Alcaraz"),
  Age = c(22, 15)
)

df2 <- data.frame (
  Name = c("Yiruma", "Bach"),
  Age = c(46, 89)
)

df_updated <- rbind(df1, df2)
df_updated
##      Name Age
## 1    Juan  22
## 2 Alcaraz  15
## 3  Yiruma  46
## 4    Bach  89

Disini kita menggunakan fungsi rbind() untuk menggabungkan dua dataframe secara baris yaitu “df1” and “df2”.

Kemudian, kita akan melakukan penambahan dataframe secara kolom (menambahkan variabel data yang lain). Kita lakukan dengan fungsi cbind().

df1 <- data.frame (
  Name = c("Juan", "Alcaraz"),
  Age = c(22, 15)
)

df2 <- data.frame (
  Hobby = c("Tennis", "Piano")
)

df_updated <- cbind(df1, df2)
df_updated
##      Name Age  Hobby
## 1    Juan  22 Tennis
## 2 Alcaraz  15  Piano

Kita bisa mencari banyaknya kolom dari dataset kita dengan fungsi length().

Contoh:

length(df_mahasiswa)
## [1] 4

Untuk memeriksa struktur dari dataframe kita, gunakan fungsi str()

str(df_mahasiswa)
## 'data.frame':    8 obs. of  4 variables:
##  $ nama_siswa: chr  "Amy" "Bob" "Chuck" "Daisy" ...
##  $ umur      : num  27 55 34 42 20 27 34 42
##  $ gender    : chr  "F" "M" "M" "F" ...
##  $ ipk       : num  3.26 3.75 2.98 3.4 2.75 3.32 3.68 3.97

7.6 Mengakses Sumber Dataset Sekunder

R menyediakan beberapa dataset bawaan yang bisa kita gunakan untuk eksplorasi pembelajaran. Dataset bawaan bisa kita panggil dengan menggunakan fungsi data().

data()
head(airquality)
##   Ozone Solar.R Wind Temp Month Day
## 1    41     190  7.4   67     5   1
## 2    36     118  8.0   72     5   2
## 3    12     149 12.6   74     5   3
## 4    18     313 11.5   62     5   4
## 5    NA      NA 14.3   56     5   5
## 6    28      NA 14.9   66     5   6
str(airquality)
## 'data.frame':    153 obs. of  6 variables:
##  $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
##  $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
##  $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
##  $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
##  $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...

Akan tetapi, dataset ini tidak terlalu bermanfaat bagi kita yang berkecimpung dalam penelitian pendidikan fisika. Salah satu dataset yang bisa kita eksplorasi adalah “spheredata” (Santoso et al., 2025). Dataset ini merupakan hasil pengukuran hasil belajar fisika siswa (kognitif, psikomotorik, dan afektif) di beberapa sekolah menengah atas. Untuk mengakses dataset ini kamu harus menginstall package “spheredata”. Installasinya sudah dijelaskan di bab 1.

Contoh:

Kita panggil library “spheredata” terlebih dahulu.

library(spheredata)

Untuk mengakses isi data dari package “spheredata” bisa kita gunakan tanda “::”


Untuk memanggil enam baris pertama dari dataset kita gunakan fungsi head()

head(demographic)
##   STUDID SCH COH GDR AGE FATHOCC MOTHOCC FATHEDU MOTHEDU FATHINC MOTHINC SIBL
## 1  A1001   1   1   1   3       1       9       4       5       7      12    2
## 2  A1002   1   1   2   1       4       8       4       4      10      12    2
## 3  A1003   1   1   1   2       4       8       3       4       2      12    0
## 4  A1004   1   1   2   3       1       1       2       2       6       6    3
## 5  A1005   1   1   1   2       1       1       3       3      10      10    2
## 6  A1006   1   1   2   2       1       7       4       2       9       4    2
##   DOM
## 1   1
## 2   1
## 3   1
## 4   1
## 5   1
## 6   2

Untuk mencari dokumentasi dari dataset “demographic” ini kita buka tab “Help”. Kita bisa mengeksplorasi dataset lainnya misalnya data pengukuran pemahaman konsep Newtonian siswa seperti yang diukur oleh instrumen Force Concept Inventory (FCI) (Hestenes et al., 1992).

head(FCI)
##   FCI1 FCI2 FCI3 FCI4 FCI5 FCI6 FCI7 FCI8 FCI9 FCI10 FCI11 FCI12 FCI13 FCI14
## 1    C    E    B    A    E    B    B    A    B     D     C     B     C     A
## 2    C    D    B    E    A    C    B    E    A     D     C     B     C     B
## 3    D    D    C    E    C    B    B    A    E     D     B     B     B     A
## 4    D    D    C    E    C    A    A    E    A     E     C     C     B     A
## 5    D    D    E    A    D    A    E    A    A     C     A     C     C     A
## 6    D    A    A    E    E    B    A    A    A     A     A     E     A     B
##   FCI15 FCI16 FCI17 FCI18 FCI19 FCI20 FCI21 FCI22 FCI23 FCI24 FCI25 FCI26 FCI27
## 1     C     C     A     E     E     A     B     D     C     E     B     C     E
## 2     C     A     B     D     D     E     C     B     A     C     C     B     B
## 3     C     A     B     D     D     C     B     D     A     A     A     D     C
## 4     C     C     D     A     B     C     B     D     B     D     D     A     C
## 5     D     D     A     D     E     C     D     A     D     A     B     A     A
## 6     D     A     A     E     D     C     A     A     A     A     A     A     A
##   FCI28 FCI29 FCI30
## 1     D     B     E
## 2     E     B     E
## 3     C     E     B
## 4     D     A     B
## 5     B     A     B
## 6     B     E     C

Untuk kunci jawaban benar kamu bisa gunakan “FCIkey”. Bagaimana untuk melakukan pensekoran data FCI ini menurut data kunci jawaban tersebut? Eksplorasilah sebagai tugas project-based learning!

7.7 Tugas (Project-Based Learning)

Kerjakanlah tugas berikut secara individu dan presentasikan hasilnya di akhir pembelajaran!

  1. Pelajarilah dataset lain yang terkandung dengan memperhatikan dokumentasi dari package “spheredata” (https://cran.r-project.org/web/packages/spheredata/spheredata.pdf)!

  2. Lakukanlah pensekoran dataset FCI di atas! Berapakah nilai mean dan standar deviasi tiap sekolah dari data skor FCI? Carilah nilai mean dan standar deviasi tiap sekolah untuk dataset asesmen siswa lainnnya antara lain FMCE, FMCI, MWCS, RRMCS, TCE, SAAR, dan CLASS!

7.8 Rubrik Penilaian Pembelajaran

Nama Mahasiswa :
NIM :

Aspek 1 2 3 4
Aktivitas pemrograman
Kelancaran tugas
Kualitas pekerjaan
Keterbukaan masukan

Definisi

  • Aktivitas pemrograman mengukur keterlibatan mahasiswa dalam proses mengikuti pelajaran.
  • Kelancaran tugas mengukur sejauh mana mahasiswa mampu mengikuti prosedur pemrograman yang telah dicontohkan dalam buku ini.
  • Kualitas pekerjaan mengukur kemampuan mahasiswa dalam menggunakan komputernya untuk melakukan pemrograman dengan R.
  • Keterbukaan masukan mengukur sejauh mana kualitas presentasi mahasiswa dan menerima masukan dan tanggapan dari temannya yang lain.

7.9 Penutup

Dalam bab ini, kita telah mempelajari salah satu tipe data yang sangat sering kita gunakan dalam proyek analisis data dengan R yaitu dataframe. Pada dasarnya, dataframe adalah sebuah tabel yang berisi baris dan kolom. Dataframe dapat disusun melalui kumpulan dari vektor yang berisi kumpulan nilai data tertentu. Suatu dataframe bisa menyimpan banyak variabel dengan tipe data yang berbeda-beda pada setiap kolomnya. Jika di masa depan kamu lupa materi ini, kamu bisa kembali ke halaman ini berulang-ulang kali. Karena hal pertama dalam sebuah proyek analisis data adalah mengakses sumber data yang mana sering kali berupa dataframe!

References

Hestenes, D., Wells, M., & Swackhamer, G. (1992). Force concept inventory. The Physics Teacher, 30(3).
Santoso, P. H., Setiaji, B., Kurniawan, Y., Wahyudi, Bahri, S., Fathurrahman, Kusuma, M., Wusqo, I. U., Muldayanti, N. D., Kurniawan, A. D., et al. (2025). Students’ performance dataset for using machine learning technique in physics education research. Scientific Data, 12(1), 987. https://doi.org/10.1038/s41597-025-04913-0