Fundamental Series — Part 16 of 20
Dua operasi penting: reshape (mengubah bentuk wide ↔︎ long) dan merge (menggabungkan tabel).
Wide → Long — pivot_longer()
library(tidyr)
library(dplyr)
df_wide <- tibble(
nama = c("Andi", "Budi"),
math = c(80, 90),
sains = c(75, 85),
bahasa = c(88, 92)
)
df_long <- df_wide |>
pivot_longer(
cols = math:bahasa,
names_to = "mata_pelajaran",
values_to = "nilai"
)Long → Wide — pivot_wider()
df_long |>
pivot_wider(
names_from = mata_pelajaran,
values_from = nilai
)Join / Merge
siswa <- tibble(
id = 1:4,
nama = c("Andi", "Budi", "Citra", "Dina")
)
nilai <- tibble(
id = c(1, 2, 3, 5),
skor = c(80, 90, 75, 85)
)Jenis Join
# Left join — semua dari kiri, match dari kanan
siswa |> left_join(nilai, join_by(id))
# Inner join — hanya yang match
siswa |> inner_join(nilai, join_by(id))
# Full join — semua dari kedua tabel
siswa |> full_join(nilai, join_by(id))
# Anti join — di kiri tapi TIDAK di kanan
siswa |> anti_join(nilai, join_by(id))bind_rows() dan bind_cols()
df1 <- tibble(nama = c("A", "B"), x = 1:2)
df2 <- tibble(nama = c("C", "D"), x = 3:4)
# Tumpuk vertikal
bind_rows(df1, df2)
# Gabung horizontal (harus jumlah baris sama)
bind_cols(df1, df2)Latihan
BahayaLatihan 16.1 — Reshape
# Data GDP per tahun (wide)
gdp <- tibble(
negara = c("Indonesia", "Malaysia", "Thailand"),
`2020` = c(1060, 337, 500),
`2021` = c(1186, 373, 506),
`2022` = c(1319, 407, 536)
)
# 1. Pivot ke long (kolom: negara, tahun, gdp)
# 2. Pivot kembali ke wide
BahayaLatihan 16.2 — Join
produk <- tibble(id = 1:3, nama = c("A", "B", "C"))
penjualan <- tibble(id = c(1, 1, 2, 4), jumlah = c(10, 20, 15, 5))
# 1. Left join — semua produk + penjualan
# 2. Anti join — produk yang tidak punya penjualan
# 3. Inner join — hanya yang matchRingkasan
| Fungsi | Keterangan |
|---|---|
pivot_longer() |
Wide → Long |
pivot_wider() |
Long → Wide |
left_join() |
Join: semua kiri |
inner_join() |
Join: hanya match |
full_join() |
Join: semua |
anti_join() |
Baris yang tidak match |
bind_rows() |
Tumpuk vertikal |
Sebelumnya: Part 15 — Group & Summarise Selanjutnya: Part 17 — Apply & Vectorisasi