Dari Format Lebar ke Panjang dengan pivot_longer()
Ubah bentuk tabel format lebar menjadi format panjang yang rapi untuk analisis.
Dari Format Lebar ke Panjang dengan pivot_longer() adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Format Data Lebar vs Panjang
Data dapat disimpan dalam format lebar (satu baris per subjek, beberapa kolom nilai) atau format panjang (satu baris per pengamatan, satu kolom untuk nama variabel dan kolom lain untuk nilai). Banyak paket R untuk visualisasi dan pemodelan mengharapkan format panjang.
library(tidyr)
library(dplyr)
# Wide format: each quarter is a column
wide_df <- data.frame(
student = c('Alice','Bob','Carol'),
q1 = c(85, 90, 78),
q2 = c(88, 85, 80),
q3 = c(92, 88, 84)
)
print(wide_df)
cat('\nShape:', nrow(wide_df), 'rows x', ncol(wide_df), 'cols')Dasar-Dasar pivot_longer()
pivot_longer(df, cols, names_to, values_to) mengubah format lebar menjadi format panjang. cols menentukan kolom yang akan diputar, names_to adalah kolom baru untuk nama kolom lama, dan values_to adalah kolom baru untuk nilainya.
library(tidyr)
wide_df <- data.frame(
student = c('Alice','Bob','Carol'),
q1 = c(85, 90, 78),
q2 = c(88, 85, 80),
q3 = c(92, 88, 84)
)
long_df <- pivot_longer(
wide_df,
cols = c(q1, q2, q3),
names_to = 'quarter',
values_to = 'score'
)
print(long_df)Memilih Kolom dengan starts_with()
Daripada mencantumkan kolom secara eksplisit, gunakan pembantu tidyselect di dalam cols. starts_with('prefix'), ends_with('suffix'), dan contains('string') sangat berguna untuk memutar kolom yang memiliki penamaan konsisten.
library(tidyr)
df <- data.frame(
id = 1:3,
sales_jan = c(100, 200, 150),
sales_feb = c(120, 180, 160),
sales_mar = c(130, 190, 170)
)
# Select all sales_ columns automatically
pivot_longer(
df,
cols = starts_with('sales_'),
names_to = 'month',
values_to = 'sales'
)Mengecualikan Kolom dengan -col
Pendekatan lainnya adalah menentukan kolom yang akan dikecualikan dari pemutaran menggunakan -col_name. Semua kolom lainnya akan diputar. Ini praktis ketika Anda hanya memiliki satu atau dua kolom ID dan banyak kolom nilai.
library(tidyr)
df <- data.frame(
region = c('East','West'),
jan = c(100, 200),
feb = c(110, 210),
mar = c(120, 220),
apr = c(130, 230)
)
# Pivot everything except 'region'
pivot_longer(df, cols = -region, names_to = 'month', values_to = 'revenue')names_prefix — Menghapus Awalan
Ketika nama kolom memiliki awalan seperti score_q1, score_q2, argumen names_prefix menghapus awalan tersebut dari kolom names_to yang dihasilkan. Ini membuat pengidentifikasi tetap bersih.
library(tidyr)
df <- data.frame(
id = 1:3,
score_q1 = c(85, 90, 78),
score_q2 = c(88, 85, 80),
score_q3 = c(92, 88, 84)
)
pivot_longer(
df,
cols = starts_with('score_'),
names_to = 'quarter',
names_prefix = 'score_',
values_to = 'score'
)Memutar Beberapa Kumpulan Kolom
Ketika Anda memiliki beberapa kelompok kolom nilai (misalnya, sales_q1 dan cost_q1), gunakan names_to dengan beberapa nilai dan names_pattern untuk memisahkan nama kolom menjadi beberapa bagian.
library(tidyr)
df <- data.frame(
id = 1:2,
sales_q1 = c(100, 200),
sales_q2 = c(110, 210),
cost_q1 = c(60, 110),
cost_q2 = c(65, 115)
)
pivot_longer(
df,
cols = -id,
names_to = c('.value', 'quarter'),
names_pattern = '(.+)_(q[0-9]+)'
)names_transform — Mengonversi Tipe
Secara default, kolom nama baru bertipe karakter. Gunakan names_transform untuk mengonversi kolom nama ke tipe lain secara otomatis (misalnya, tahun bertipe bilangan bulat dari nama kolom seperti y2020, y2021).
library(tidyr)
df <- data.frame(
product = c('A','B'),
y2021 = c(100, 200),
y2022 = c(110, 210),
y2023 = c(120, 220)
)
result <- pivot_longer(
df,
cols = -product,
names_to = 'year',
names_prefix = 'y',
names_transform = list(year = as.integer),
values_to = 'sales'
)
print(result)
cat('year column type:', class(result$year))values_drop_na — Menghapus Nilai yang Hilang
Ketika format lebar memiliki nilai yang hilang untuk beberapa kombinasi kolom-baris, nilai tersebut muncul sebagai NA dalam format panjang. Atur values_drop_na = TRUE untuk otomatis menghapus baris yang nilainya adalah NA.
library(tidyr)
df <- data.frame(
student = c('Alice','Bob','Carol'),
q1 = c(85, NA, 78),
q2 = c(88, 85, NA),
q3 = c(NA, 88, 84)
)
# Without drop: 9 rows including NAs
pivot_longer(df, -student, names_to='quarter', values_to='score',
values_drop_na = TRUE)Format Panjang Memungkinkan ggplot2
Alasan terpenting untuk mengubah data ke format panjang adalah: ggplot2 memetakan estetika dari kolom. Ketika semua nilai berada dalam satu kolom dan kategorinya berada dalam kolom lain, Anda dapat menggunakan color = quarter atau facet_wrap(~quarter) dengan mudah.
library(tidyr)
# (ggplot2 not run here, but showing the data preparation)
df <- data.frame(
month = c('Jan','Feb','Mar'),
product_A = c(100, 120, 110),
product_B = c(200, 190, 210)
)
# After pivoting, ready for ggplot2:
long_df <- pivot_longer(df, -month, names_to='product', values_to='sales')
print(long_df)
# ggplot(long_df, aes(x=month, y=sales, color=product)) + geom_line()Memutar dengan Nama Kolom Numerik
Terkadang nama kolom hanya berupa angka (misalnya, tahun: 2020, 2021). Dalam R, nama kolom numerik diberi tanda kutip dalam kerangka data. Gunakan num_range('', 2020:2023) atau tanda kutip backtick pada argumen cols untuk menanganinya.
library(tidyr)
# Year columns as numbers (common in census-style data)
df <- data.frame(
country = c('US','UK'),
'2021' = c(100, 80),
'2022' = c(110, 85),
'2023' = c(120, 90),
check.names = FALSE
)
pivot_longer(
df,
cols = c('2021','2022','2023'),
names_to = 'year',
values_to = 'gdp_index'
)Membandingkan Hasil Pemutaran
Setelah memutar data, validasikan hasilnya: jumlah baris harus berupa nrow(wide) * n_pivoted_cols, dan nilai unik dalam kolom names_to harus sama dengan nama kolom asli (dikurangi awalan jika dihapus).
library(tidyr)
wide <- data.frame(
id = 1:4,
jan = c(10,20,30,40),
feb = c(11,21,31,41),
mar = c(12,22,32,42)
)
long <- pivot_longer(wide, -id, names_to='month', values_to='value')
cat('Wide rows:', nrow(wide), '\n')
cat('Long rows:', nrow(long), '(expected', nrow(wide)*3, ')\n')
cat('Months:', paste(unique(long$month), collapse=', '), '\n')Pemeriksaan Cepat
Apa yang dilakukan argumen names_prefix dalam pivot_longer()?
Ringkasan: pivot_longer()
Hal-hal penting tentang konversi format lebar ke panjang:
pivot_longer(df, cols, names_to, values_to)adalah fungsi utamacolsmenerima tidyselect:starts_with(),-id_col,c('a','b')names_prefixmenghapus string awal dari nama kolomnames_transformmengonversi tipe kolom nama (misalnya, menjadi bilangan bulat)values_drop_na = TRUEotomatis menghapus baris NA- Format panjang diperlukan oleh ggplot2, sebagian besar fungsi pemodelan, dan pengujian statistik
- Validasi: jumlah baris panjang = jumlah baris lebar × jumlah kolom yang diputar
library(tidyr)
df <- data.frame(
team = c('Alpha','Beta'),
sales_2022 = c(100, 200),
sales_2023 = c(120, 220),
sales_2024 = c(140, 240)
)
pivot_longer(
df,
cols = starts_with('sales_'),
names_to = 'year',
names_prefix = 'sales_',
names_transform = list(year = as.integer),
values_to = 'revenue'
)Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dari Format Lebar ke Panjang dengan pivot_longer()” gratis?
Ya — teks lengkap “Dari Format Lebar ke Panjang dengan pivot_longer()” 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 Lebar ke Panjang dengan pivot_longer()”?
Ubah bentuk tabel format lebar menjadi format panjang yang rapi untuk analisis. 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 1 dari 4.
Berapa lama pelajaran “Dari Format Lebar ke Panjang dengan pivot_longer()” 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
- Dari Format Lebar ke Panjang dengan pivot_longer()
- Dari Format Panjang ke Lebar dengan pivot_wider()
- separate() dan unite() untuk Kolom String
- Menyarangkan dan Membuka Sarang Data Frame