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

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *