0Pricing
R Academy · Pelajaran

Dari Format Panjang ke Lebar dengan pivot_wider()

Bentangkan kembali pasangan kunci-nilai menjadi tabel format lebar.

Dari Format Panjang ke Lebar dengan pivot_wider() adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Kapan Menggunakan Format Lebar

Meskipun format panjang cocok untuk analisis, format lebar sering diperlukan untuk laporan, lembar kerja, dan algoritme tertentu (misalnya, matriks korelasi). pivot_wider() adalah kebalikan dari pivot_longer() — fungsi ini menyebarkan nilai dari satu kolom ke beberapa kolom baru.

library(tidyr)

# Long format: one row per student-quarter combination
long_df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
  quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
  score = c(85, 88, 92, 90, 85, 88)
)

print(long_df)
cat('\n', nrow(long_df), 'rows x', ncol(long_df), 'cols')

Dasar-Dasar pivot_wider()

pivot_wider(df, names_from, values_from) mengubah format panjang menjadi format lebar. names_from menentukan kolom yang nilainya menjadi nama kolom baru; values_from menentukan kolom yang nilainya mengisi kolom-kolom baru tersebut.

library(tidyr)

long_df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
  quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
  score = c(85, 88, 92, 90, 85, 88)
)

wide_df <- pivot_wider(
  long_df,
  names_from = quarter,
  values_from = score
)

print(wide_df)

id_cols — Mengidentifikasi Kunci Baris

id_cols menentukan kolom yang secara unik mengidentifikasi setiap baris dalam output format lebar. Secara default, dplyr menggunakan semua kolom yang tidak ditentukan dalam names_from atau values_from. Menentukannya secara eksplisit mencegah pengelompokan yang tidak diharapkan.

library(tidyr)

df <- data.frame(
  year = c(2023,2023,2024,2024),
  region = c('East','West','East','West'),
  quarter = c('Q1','Q1','Q1','Q1'),
  revenue = c(100, 200, 120, 220)
)

pivot_wider(
  df,
  id_cols = c(year, quarter),
  names_from = region,
  values_from = revenue
)

values_fill — Menangani Kombinasi yang Hilang

Jika beberapa kombinasi id_cols dan names_from tidak ada, sel yang dihasilkan akan berisi NA. Gunakan values_fill untuk mengganti nilai yang hilang tersebut dengan nilai bawaan (misalnya, 0 untuk hitungan atau jumlah).

library(tidyr)

df <- data.frame(
  product = c('A','A','B'),
  channel = c('online','store','online'),
  sales = c(100, 150, 200)
)

# 'B' has no 'store' data — fill with 0
pivot_wider(
  df,
  names_from = channel,
  values_from = sales,
  values_fill = 0
)

names_prefix — Menambahkan Awalan

Gunakan names_prefix untuk menambahkan sebuah string di awal semua nama kolom baru. Ini menghindari masalah ketika nilai dalam names_from berupa angka atau ketika Anda ingin membuat nama kolom yang lebih deskriptif.

library(tidyr)

df <- data.frame(
  student = c('Alice','Alice','Bob','Bob'),
  quarter = c(1, 2, 1, 2),
  score = c(85, 90, 78, 82)
)

# Without prefix: columns named '1' and '2' (problematic)
# With prefix: q1, q2
pivot_wider(
  df,
  names_from = quarter,
  values_from = score,
  names_prefix = 'q'
)

Beberapa Kolom values_from

Anda dapat melakukan pivot pada beberapa kolom nilai sekaligus dengan meneruskan sebuah vektor ke values_from. Kolom yang dihasilkan diberi nama dalam format value_name, dengan menggabungkan nama kolom nilai dan kategorinya.

library(tidyr)

df <- data.frame(
  region = c('East','East','West','West'),
  period = c('Q1','Q2','Q1','Q2'),
  revenue = c(100, 120, 200, 210),
  units = c(10, 12, 20, 22)
)

pivot_wider(
  df,
  names_from = period,
  values_from = c(revenue, units)
)

Menangani Duplikasi dengan values_fn

Jika terdapat beberapa nilai untuk kombinasi id dan nama yang sama, pivot_wider tidak tahu nilai mana yang harus digunakan dan mengembalikan kolom berisi daftar disertai peringatan. Gunakan values_fn untuk mengatasinya dengan menentukan fungsi agregasi.

library(tidyr)

# Duplicate rows: Alice has two Q1 scores
df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob'),
  quarter = c('Q1','Q1','Q2','Q1','Q2'),
  score = c(85, 87, 90, 78, 82)
)

# Resolve duplicates by taking the mean
pivot_wider(
  df,
  names_from = quarter,
  values_from = score,
  values_fn = mean
)

values_fn dengan Daftar Bernama

Teruskan daftar bernama ke values_fn untuk menerapkan fungsi agregasi yang berbeda ke beberapa kolom nilai secara bersamaan. Ini sangat berguna saat melakukan pivot pada beberapa kolom nilai yang memerlukan metode peringkasan yang berbeda.

library(tidyr)

df <- data.frame(
  region = c('East','East','West','West'),
  period = c('Q1','Q1','Q1','Q1'),
  revenue = c(100, 120, 200, 210),
  orders = c(10, 12, 20, 22)
)

pivot_wider(
  df,
  names_from = period,
  values_from = c(revenue, orders),
  values_fn = list(revenue = sum, orders = sum)
)

Membuat Tabulasi Silang

Tabulasi silang (tabel kontingensi) dalam bentuk bingkai data dapat dibuat dengan mudah menggunakan pivot_wider() setelah menghitung data dengan dplyr::count(). Cara ini menggabungkan kekuatan kedua paket untuk analisis frekuensi.

library(tidyr)
library(dplyr)

survey <- data.frame(
  dept = c('HR','HR','Eng','Eng','HR','Eng'),
  response = c('Yes','No','Yes','Yes','Yes','No')
)

survey %>%
  count(dept, response) %>%
  pivot_wider(
    names_from = response,
    values_from = n,
    values_fill = 0
  )

Bolak-Balik: Long → Wide → Long

Memahami hubungan invers antara pivot_longer() dan pivot_wider() membantu menemukan error. Proses bolak-balik (long→wide→long) seharusnya mengembalikan data asli (kecuali urutan baris dan konversi tipe).

library(tidyr)

original_long <- data.frame(
  id = c(1,1,2,2),
  key = c('a','b','a','b'),
  value = c(10, 20, 30, 40)
)

# Go wide
wide <- pivot_wider(original_long, names_from=key, values_from=value)
print(wide)

# Go long again
pivot_longer(wide, -id, names_to='key', values_to='value')

Praktik: Laporan Nilai

Salah satu penggunaan umum: ambil tabel panjang berisi nilai tes, lalu ubah bentuknya menjadi tabel laporan siswa berdasarkan mata pelajaran. Gabungkan dengan dplyr::arrange() dan rename() untuk menghasilkan output yang rapi dan siap disajikan.

library(tidyr)
library(dplyr)

scores <- data.frame(
  student = c('Alice','Alice','Bob','Bob','Carol','Carol'),
  subject = c('Math','Science','Math','Science','Math','Science'),
  score = c(92, 88, 85, 91, 79, 83)
)

scores %>%
  pivot_wider(names_from=subject, values_from=score) %>%
  mutate(average = round((Math + Science) / 2, 1)) %>%
  arrange(desc(average))

Pemeriksaan Singkat

Apa yang terjadi ketika Anda memanggil pivot_wider() dan terdapat beberapa nilai untuk kombinasi id dan nama yang sama?

Ringkasan: pivot_wider()

Hal-hal penting untuk konversi long ke wide:

  • pivot_wider(names_from, values_from) menyebarkan kolom kunci menjadi beberapa kolom baru
  • id_cols menentukan kolom yang mengidentifikasi setiap baris
  • values_fill = 0 (atau skalar apa pun) mengisi kombinasi yang hilang
  • names_prefix menambahkan string di awal untuk menghindari nama kolom numerik atau ambigu
  • values_fn mengatasi nilai sel yang duplikat dengan fungsi agregasi
  • Teruskan sebuah vektor ke values_from untuk melakukan pivot pada beberapa kolom nilai secara bersamaan
  • Gunakan setelah count() untuk membuat tabulasi silang secara efisien
library(tidyr)
library(dplyr)

data.frame(
  region = c('East','East','West','West'),
  metric = c('revenue','units','revenue','units'),
  value = c(100, 10, 200, 20)
) %>%
  pivot_wider(
    names_from = metric,
    values_from = value,
    values_fill = 0
  ) %>%
  mutate(revenue_per_unit = revenue / units)

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Dari Format Panjang ke Lebar dengan pivot_wider()” gratis?

Ya — teks lengkap “Dari Format Panjang ke Lebar dengan pivot_wider()” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Dari Format Panjang ke Lebar dengan pivot_wider()”?

Bentangkan kembali pasangan kunci-nilai menjadi tabel format lebar. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Dari Format Panjang ke Lebar dengan pivot_wider()” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dari Format Lebar ke Panjang dengan pivot_longer()
  2. Dari Format Panjang ke Lebar dengan pivot_wider()
  3. separate() dan unite() untuk Kolom String
  4. Menyarangkan dan Membuka Sarang Data Frame
← Kembali ke R Academy