Ringkasan Berkelompok dan group_by()
Agregasikan data berdasarkan kelompok dan hitung statistik per kelompok.
Ringkasan Berkelompok dan group_by() 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.
Mengapa Mengelompokkan Data?
Pengelompokan data adalah salah satu operasi paling kuat dalam analisis data. Alih-alih menghitung statistik untuk seluruh set data, Anda menghitungnya dalam setiap kelompok. Paket dplyr membuatnya intuitif dengan group_by() yang diikuti summarize().
library(dplyr)
# Sample sales data
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
print(sales)Dasar-Dasar group_by()
group_by(col) menandai kerangka data agar operasi berikutnya dilakukan per kelompok. Fungsi ini tidak mengubah data itu sendiri — hanya menambahkan metadata pengelompokan. Anda dapat mengelompokkan berdasarkan satu atau beberapa kolom.
library(dplyr)
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
# Group by region
grouped <- sales %>% group_by(region)
print(grouped)
print(group_keys(grouped))summarize() Setelah group_by()
summarize() (atau summarise()) meringkas setiap kelompok menjadi satu baris. Anda menentukan nama kolom baru dan fungsi ringkasan yang akan diterapkan. Fungsi yang umum digunakan: n(), mean(), sum(), min(), max().
library(dplyr)
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
sales %>%
group_by(region) %>%
summarize(
n = n(),
mean_revenue = mean(revenue),
total_units = sum(units)
)Menghitung dengan n()
n() di dalam summarize() mengembalikan jumlah baris dalam setiap kelompok. Fungsi ini tidak memerlukan argumen. Untuk menghitung baris yang sesuai dengan suatu kondisi, gunakan sum(condition). n_distinct(col) menghitung nilai unik.
library(dplyr)
employees <- data.frame(
dept = c('HR','HR','Eng','Eng','Eng','Sales'),
salary = c(55000, 60000, 95000, 105000, 90000, 70000),
senior = c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
)
employees %>%
group_by(dept) %>%
summarize(
count = n(),
senior_count = sum(senior),
avg_salary = mean(salary)
)Mengelompokkan Berdasarkan Beberapa Kolom
Anda dapat meneruskan beberapa kolom ke group_by(). Kelompok dibentuk berdasarkan setiap kombinasi nilai yang ada dalam data. Ini berguna untuk tabulasi silang dan ringkasan hierarkis.
library(dplyr)
orders <- data.frame(
region = c('North','North','South','South','North','South'),
product = c('A','B','A','B','A','A'),
sales = c(100, 200, 150, 250, 120, 180)
)
orders %>%
group_by(region, product) %>%
summarize(
total_sales = sum(sales),
orders = n(),
.groups = 'drop'
)Argumen .groups
Setelah summarize(), hasilnya masih dikelompokkan berdasarkan semua variabel pengelompokan kecuali yang terakhir. Argumen .groups mengendalikan hal ini:
'drop_last'— bawaan, menghapus tingkat kelompok terakhir'drop'— menghapus semua pengelompokan'keep'— mempertahankan semua pengelompokan
library(dplyr)
df <- data.frame(
year = c(2022,2022,2023,2023),
quarter = c('Q1','Q2','Q1','Q2'),
revenue = c(100, 120, 130, 150)
)
# .groups = 'drop' ensures ungrouped result
result <- df %>%
group_by(year, quarter) %>%
summarize(total = sum(revenue), .groups = 'drop')
print(result)
print(is.grouped_df(result)) # FALSEungroup() Secara Eksplisit
Anda selalu dapat memanggil ungroup() untuk menghapus metadata pengelompokan dari kerangka data. Ini penting saat Anda ingin operasi berikutnya bekerja pada seluruh data, bukan per kelompok.
library(dplyr)
df <- data.frame(
dept = c('HR','HR','Eng','Eng'),
salary = c(55000, 60000, 95000, 105000)
)
# Without ungroup: rank is within group
df %>%
group_by(dept) %>%
mutate(rank_in_dept = rank(salary)) %>%
ungroup() %>%
mutate(rank_overall = rank(salary))group_keys() dan n_groups()
group_keys() mengembalikan kerangka data yang menampilkan kombinasi kelompok unik. n_groups() memberi tahu jumlah kelompok yang ada. Keduanya berguna untuk melakukan pemeriksaan sebelum menjalankan operasi berkelompok.
library(dplyr)
df <- data.frame(
country = c('US','US','UK','UK','DE'),
category = c('A','B','A','A','B'),
value = c(10, 20, 15, 25, 30)
)
grouped <- df %>% group_by(country, category)
cat('Number of groups:', n_groups(grouped), '\n')
print(group_keys(grouped))Meringkas dengan Beberapa Statistik
Anda dapat menghitung banyak statistik ringkasan dalam satu pemanggilan summarize(). Gabungkan jumlah, rata-rata, median, simpangan baku, nilai minimum, maksimum, dan perhitungan khusus sekaligus.
library(dplyr)
scores <- data.frame(
class = c('A','A','A','B','B','B','C','C'),
score = c(85, 90, 78, 92, 88, 95, 70, 75)
)
scores %>%
group_by(class) %>%
summarize(
n = n(),
mean_score = round(mean(score), 1),
median_score = median(score),
sd_score = round(sd(score), 2),
min_score = min(score),
max_score = max(score)
)mutate() yang Memahami Kelompok
mutate() setelah group_by() menghitung nilai dalam setiap kelompok tetapi mempertahankan semua baris (berbeda dari summarize()). Ini sempurna untuk menghitung metrik tingkat kelompok yang ingin Anda lampirkan pada setiap baris.
library(dplyr)
sales <- data.frame(
region = c('East','East','West','West','West'),
rep = c('Alice','Bob','Carol','Dave','Eve'),
revenue = c(150, 200, 120, 180, 160)
)
sales %>%
group_by(region) %>%
mutate(
region_total = sum(revenue),
pct_of_region = round(100 * revenue / sum(revenue), 1)
) %>%
ungroup()Memfilter dalam Kelompok
filter() setelah group_by() memfilter baris berdasarkan kondisi tingkat kelompok. Misalnya, pertahankan hanya kinerja terbaik per wilayah atau baris yang nilainya melebihi rata-rata kelompok.
library(dplyr)
sales <- data.frame(
region = c('East','East','West','West','North','North'),
rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
revenue = c(150, 200, 120, 180, 95, 130)
)
# Keep the top rep per region
sales %>%
group_by(region) %>%
filter(revenue == max(revenue)) %>%
ungroup()Pemeriksaan Singkat
Apa yang dilakukan argumen .groups = 'drop' dalam summarize()?
Ringkasan: Ringkasan Berkelompok
Inti pembelajaran dari ringkasan berkelompok:
group_by(col)menambahkan pengelompokan — data tidak berubah, tetapi operasi menjadi memahami kelompoksummarize()meringkas setiap kelompok menjadi satu baris — gunakann(),mean(),sum(), dan sebagainya.groups = 'drop'memastikan hasil tidak dikelompokkanungroup()menghapus pengelompokan kapan sajagroup_keys()memeriksa tingkat kelompok;n_groups()menghitungnyamutate()+group_by()menambahkan kolom tingkat kelompok tanpa meringkas baris
library(dplyr)
# Full pipeline example
data.frame(
dept = c('Eng','Eng','HR','HR','Sales'),
salary = c(95000, 110000, 60000, 65000, 75000)
) %>%
group_by(dept) %>%
summarize(
headcount = n(),
avg_salary = mean(salary),
.groups = 'drop'
) %>%
arrange(desc(avg_salary))Pertanyaan yang Sering Diajukan
Apakah pelajaran “Ringkasan Berkelompok dan group_by()” gratis?
Ya — teks lengkap “Ringkasan Berkelompok dan group_by()” 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 “Ringkasan Berkelompok dan group_by()”?
Agregasikan data berdasarkan kelompok dan hitung statistik per kelompok. 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 “Ringkasan Berkelompok dan group_by()” 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
- Ringkasan Berkelompok dan group_by()
- Fungsi Jendela: lag, lead, cumsum
- Join Banyak Tabel dalam dplyr
- Evaluasi Rapi: {{ }} dan .data