Fundamental Series — Part 2 of 20
Vektor adalah struktur data paling fundamental di R. Hampir semua hal di R adalah vektor atau dibangun dari vektor. Part ini membahas vektor, list, dan cara mengakses elemennya.
Vektor: Koleksi Satu Tipe
Vektor dibuat dengan fungsi c() (combine):
# Vektor numerik
gdp <- c(45.2, 38.1, 52.7, 41.3, 88.6)
# Vektor character
kota <- c("Jakarta", "Bandung", "Surabaya")
# Vektor logical
lulus <- c(TRUE, FALSE, TRUE, TRUE, FALSE)Vektor hanya bisa menyimpan satu tipe data. Jika dicampur, R otomatis melakukan coercion:
c(1, "dua", TRUE) # "1" "dua" "TRUE" — semua jadi character
c(1, TRUE, FALSE) # 1 1 0 — logical jadi numericMembuat Vektor dengan Pola
# Sequence
1:10 # 1 2 3 4 5 6 7 8 9 10
seq(0, 1, by = 0.2) # 0.0 0.2 0.4 0.6 0.8 1.0
seq(1, 100, length.out = 5) # 1 25.75 50.5 75.25 100
# Repetisi
rep(0, 5) # 0 0 0 0 0
rep(c(1, 2), 3) # 1 2 1 2 1 2
rep(c(1, 2), each = 3) # 1 1 1 2 2 2Indexing: Mengakses Elemen
R menggunakan index mulai dari 1 (bukan 0 seperti Python).
x <- c(10, 20, 30, 40, 50)
# Akses satu elemen
x[1] # 10 (elemen pertama)
x[3] # 30
x[5] # 50
# Akses beberapa elemen
x[c(1, 3, 5)] # 10 30 50
x[2:4] # 20 30 40
# Exclude elemen (negatif)
x[-1] # 20 30 40 50 (tanpa elemen pertama)
x[-c(1, 5)] # 20 30 40 (tanpa elemen pertama & terakhir)Indexing dengan Logical
x <- c(10, 20, 30, 40, 50)
x[x > 25] # 30 40 50
x[x >= 20 & x <= 40] # 20 30 40Named Indexing
nilai <- c(mtk = 85, ipa = 90, ips = 78)
nilai["mtk"] # 85
nilai[c("ipa", "ips")] # 90 78
names(nilai) # "mtk" "ipa" "ips"Modifikasi Vektor
x <- c(10, 20, 30, 40, 50)
# Ubah satu elemen
x[3] <- 99 # 10 20 99 40 50
# Ubah beberapa elemen
x[c(1, 5)] <- 0 # 0 20 99 40 0
# Tambah elemen
x <- c(x, 60) # 0 20 99 40 0 60
# Hapus elemen
x <- x[-3] # hapus elemen ke-3Operasi Vektorisasi
Operasi di R berjalan elemen per elemen secara otomatis — tidak perlu loop:
x <- c(1, 2, 3, 4, 5)
x + 10 # 11 12 13 14 15
x * 2 # 2 4 6 8 10
x^2 # 1 4 9 16 25
sqrt(x) # 1.000 1.414 1.732 2.000 2.236Operasi Antar Vektor
a <- c(1, 2, 3)
b <- c(10, 20, 30)
a + b # 11 22 33
a * b # 10 40 90Jika panjang vektor berbeda, R mendaur ulang vektor yang lebih pendek:
c(1, 2, 3, 4) + c(10, 20) # 11 22 13 24
# c(10,20) didaur ulang menjadi c(10,20,10,20)Ini kadang berguna, kadang berbahaya. R memberi warning jika panjangnya bukan kelipatan.
Fungsi Agregasi
x <- c(10, 20, 30, 40, 50)
length(x) # 5
sum(x) # 150
mean(x) # 30
min(x) # 10
max(x) # 50
range(x) # 10 50
sort(x, decreasing = TRUE) # 50 40 30 20 10List: Koleksi Multi-Tipe
List bisa menyimpan berbagai tipe data dan objek dengan panjang berbeda:
mahasiswa <- list(
nama = "Andi",
umur = 22,
nilai = c(85, 90, 78),
lulus = TRUE
)Akses Elemen List
# Dengan $
mahasiswa$nama # "Andi"
mahasiswa$nilai # 85 90 78
# Dengan [[ ]] (index posisi)
mahasiswa[[1]] # "Andi"
mahasiswa[["umur"]] # 22
# Dengan [ ] — mengembalikan sub-list (bukan elemennya)
mahasiswa[1] # $nama [1] "Andi" (masih list!)[[ vs [
[[ ]]→ mengambil isi elemen (skalar/vektor)[ ]→ mengambil sub-list (tetap list)
Analogi: [[ ]] = membuka kotak dan mengambil isinya. [ ] = mengambil kotak kecil dari kotak besar.
Modifikasi List
# Tambah elemen baru
mahasiswa$jurusan <- "Ekonomi"
# Ubah elemen
mahasiswa$umur <- 23
# Hapus elemen
mahasiswa$lulus <- NULL
# Cek struktur
str(mahasiswa)Matrix (Bonus)
Matrix adalah vektor 2 dimensi:
m <- matrix(1:12, nrow = 3, ncol = 4)
m
# [,1] [,2] [,3] [,4]
# [1,] 1 4 7 10
# [2,] 2 5 8 11
# [3,] 3 6 9 12
# Akses elemen
m[1, 3] # 7 (baris 1, kolom 3)
m[2, ] # 2 5 8 11 (seluruh baris 2)
m[, 4] # 10 11 12 (seluruh kolom 4)
# Dimensi
dim(m) # 3 4
nrow(m) # 3
ncol(m) # 4Latihan
suhu <- c(28.5, 30.1, 27.8, 31.2, 29.0, 33.5, 26.4)
# 1. Berapa panjang vektor suhu?
# 2. Ambil elemen ke-2 sampai ke-5
# 3. Ambil semua suhu yang di atas 30 derajat
# 4. Berapa rata-rata suhu?
# 5. Ganti elemen terakhir menjadi 28.0# Buat named vector:
pendapatan <- c(jakarta = 250, bandung = 150, surabaya = 180,
medan = 120, makassar = 100)
# 1. Akses pendapatan Jakarta
# 2. Ambil kota yang pendapatannya > 140
# 3. Urutkan dari terbesar ke terkecil
# 4. Hitung selisih max dan min (range)# Buat list berisi info provinsi:
# - nama: "Jawa Barat"
# - ibukota: "Bandung"
# - kabupaten: vektor 5 nama kabupaten
# - populasi: 48.27 (juta)
# 1. Akses nama ibukota
# 2. Akses kabupaten ke-3
# 3. Tambahkan elemen baru: luas = 35377.76
# 4. Lihat struktur list dengan str()Ringkasan
| Konsep | Keterangan |
|---|---|
c() |
Buat vektor |
1:10, seq(), rep() |
Vektor berpola |
x[i] |
Akses elemen ke-i (mulai dari 1) |
x[-i] |
Semua elemen kecuali ke-i |
x[x > 5] |
Filter dengan kondisi |
| Vektorisasi | Operasi otomatis per elemen |
list() |
Buat list (multi-tipe) |
$, [[ ]] |
Akses elemen list |
matrix() |
Vektor 2 dimensi |
Sebelumnya: Part 1 — Variabel & Tipe Data Selanjutnya: Part 3 — Struktur Data II: DataFrame