วิธีจัดกลุ่มตามคอลัมน์ทั้งหมดยกเว้นคอลัมน์เดียวใน dplyr


คุณสามารถใช้ไวยากรณ์พื้นฐานต่อไปนี้เพื่อจัดกลุ่มทั้งหมดยกเว้นคอลัมน์เดียวในกรอบข้อมูลโดยใช้แพ็คเกจ dplyr ใน R:

 df %>%
  group_by(across(c( - this_column)))

ตัวอย่างนี้จัดกลุ่มเฟรมข้อมูลตามคอลัมน์ทั้งหมด ยกเว้นคอลัมน์ที่เรียกว่า this_column

โปรดทราบว่าเครื่องหมายลบ ( ) ในสูตรจะบอก dplyr ให้ยกเว้นคอลัมน์นั้นในฟังก์ชัน group_by()

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ

ตัวอย่าง: จัดกลุ่มตามคอลัมน์ทั้งหมด ยกเว้นคอลัมน์เดียวใน dplyr

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ซึ่งมีข้อมูลเกี่ยวกับผู้เล่นบาสเกตบอลต่างๆ:

 #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

ตอนนี้ สมมติว่าเราต้องการค้นหาค่าสูงสุดในคอลัมน์ จุด โดยจัดกลุ่มตามคอลัมน์อื่นๆ ทั้งหมดในกรอบข้อมูล

เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อทำสิ่งนี้:

 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

จากผลลัพธ์เราจะเห็นได้ว่า:

  • ค่าคะแนนสูงสุดสำหรับผู้เล่นทุกคนที่มีค่า ทีม เป็น A ค่า ตำแหน่ง G และค่า เริ่มต้น เป็น Y คือ 104
  • คะแนนสูงสุดสำหรับผู้เล่นทุกคนที่มีค่า ทีม เป็น A ค่า ตำแหน่ง F และค่า เริ่มต้น เป็น Y คือ 119
  • คะแนนสูงสุดสำหรับผู้เล่นทุกคนที่มีค่า ทีม A ค่า ตำแหน่ง F และค่า เริ่มต้น N คือ 113

และอื่นๆ

โปรดทราบว่าเราอาจได้รับผลลัพธ์เดียวกันหากเราพิมพ์ชื่อคอลัมน์ทุกคอลัมน์ยกเว้น จุดลง ในฟังก์ชัน 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

ซึ่งสอดคล้องกับผลลัพธ์ของตัวอย่างก่อนหน้านี้

อย่างไรก็ตาม โปรดทราบว่าการแยกคอลัมน์ point ในฟังก์ชัน group_by() ออกได้ง่ายกว่ามาก แทนที่จะพิมพ์ชื่อของคอลัมน์อื่นๆ ทั้งหมด

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้อธิบายวิธีดำเนินการงานทั่วไปอื่น ๆ โดยใช้ dplyr:

วิธีกรองแถวที่มีสตริงบางตัวโดยใช้ dplyr
วิธีการคำนวณความถี่สัมพัทธ์โดยใช้ dplyr
วิธีเลือกแถวแรกตามกลุ่มโดยใช้ dplyr

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *