Cara mengelompokkan berdasarkan semua kolom kecuali satu di dplyr
Anda dapat menggunakan sintaks dasar berikut untuk mengelompokkan semua kecuali satu kolom dalam bingkai data menggunakan paket dplyr di R:
df %>%
group_by(across(c( - this_column)))
Contoh khusus ini mengelompokkan bingkai data berdasarkan semua kolom kecuali kolom yang disebut this_column .
Perhatikan bahwa tanda negatif ( – ) dalam rumus memberitahu dplyr untuk mengecualikan kolom tertentu dalam fungsi group_by() .
Contoh berikut menunjukkan cara menggunakan sintaksis ini dalam praktiknya.
Contoh: mengelompokkan berdasarkan semua kolom kecuali satu di dplyr
Misalkan kita memiliki kerangka data berikut di R yang berisi informasi tentang berbagai pemain bola basket:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'), starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'), dots=c(99, 104, 119, 113)) #view data frame df team position starter points 1 AGY 99 2 AGY 104 3 AFY 119 4 AFN 113 5 BGY 99 6 BGN 104 7 BFN 119 8 BFN 113
Sekarang misalkan kita ingin mencari nilai maksimum di kolom poin , yang dikelompokkan di seluruh kolom lain dalam bingkai data.
Kita dapat menggunakan sintaks berikut untuk melakukan ini:
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c( - points))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
Dari hasilnya kita dapat melihat:
- Nilai poin maksimum untuk semua pemain dengan nilai tim A, nilai posisi G, dan nilai awal Y adalah 104 .
- Nilai poin maksimum untuk semua pemain dengan nilai tim A, nilai posisi F, dan nilai awal Y adalah 119 .
- Nilai poin maksimum untuk semua pemain dengan nilai tim A, nilai posisi F, dan nilai awal N adalah 113 .
Dan seterusnya.
Perhatikan bahwa kita juga bisa mendapatkan hasil yang sama jika kita mengetikkan setiap nama kolom kecuali titik ke dalam fungsi group_by() :
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(team, position, starter))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
Hal ini sesuai dengan hasil contoh sebelumnya.
Namun, perhatikan bahwa jauh lebih mudah untuk mengecualikan kolom poin dalam fungsi group_by() daripada mengetikkan nama semua kolom lainnya.
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan tugas umum lainnya menggunakan dplyr:
Cara memfilter baris yang berisi string tertentu menggunakan dplyr
Cara menghitung frekuensi relatif menggunakan dplyr
Cara memilih baris pertama berdasarkan grup menggunakan dplyr