วิธีจัดกลุ่มตามคอลัมน์ทั้งหมดยกเว้นคอลัมน์เดียวใน 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