วิธีค้นหาค่าสูงสุดต่อกลุ่มใน r
บ่อยครั้งที่คุณอาจต้องการค้นหาค่าสูงสุดของแต่ละกลุ่มใน data frame ใน R โชคดีที่ทำได้ง่ายโดยใช้ฟังก์ชันในแพ็คเกจ dplyr
บทช่วยสอนนี้จะอธิบายวิธีการทำเช่นนี้โดยใช้กรอบข้อมูลต่อไปนี้:
#create data frame df <- data.frame(team = c('A', 'A', 'A', 'B', 'B', 'B', 'B'), position = c('G', 'F', 'F', 'G', 'G', 'G', 'F'), points = c(12, 15, 19, 22, 34, 34, 39)) #view data frame df team position points 1 AG 12 2 AF15 3 FY 19 4 BG 22 5 BG 34 6 BG 34 7 BF 39
ตัวอย่างที่ 1: ค้นหาค่าสูงสุดต่อกลุ่ม
รหัสต่อไปนี้แสดงวิธีการค้นหามูลค่าสูงสุดต่อทีมต่อตำแหน่ง:
library(dplyr) #find max value by team and position df %>% group_by (team, position) %>% summarize (max = max(points, na.rm= TRUE )) # A tibble: 4 x 3 # Groups: team [?] team position max 1AF 19.0 2 AG 12.0 3 BF 39.0 4 BG 34.0
ตัวอย่างที่ 2: ส่งกลับแถวที่มีค่าสูงสุดต่อกลุ่ม
รหัสต่อไปนี้แสดงวิธีการส่งคืนแถวที่มีค่าสูงสุดต่อทีมและต่อตำแหน่ง:
library(dplyr) #find rows that contain max points by team and position df %>% group_by (team, position) %>% filter (points == max(points, na.rm= TRUE )) # A tibble: 5 x 3 # Groups: team, position [4] team position points 1 AG 12.0 2AF 19.0 3 BG 34.0 4 BG 34.0 5BF 39.0
ตัวอย่างที่ 3: ส่งกลับแถวเดียวที่มีค่าสูงสุดต่อกลุ่ม
ในตัวอย่างก่อนหน้านี้ มีผู้เล่นสองคนที่มีคะแนนสูงสุดในทีม A และทั้งคู่อยู่ในตำแหน่ง G หากคุณต้องการส่งผู้เล่นคนแรกที่มีค่าสูงสุดกลับคืนให้กับกลุ่ม คุณสามารถใช้ สไลซ์ ( ) การทำงาน. ดำเนินการดังต่อไปนี้:
library(dplyr) #find rows that contain max points by team and position df %>% group_by (team, position) %>% slice (which.max(points)) # A tibble: 4 x 3 # Groups: team, position [4] team position points 1AF 19.0 2 AG 12.0 3 BF 39.0 4 BG 34.0
แหล่งข้อมูลเพิ่มเติม
คู่มือฉบับสมบูรณ์: วิธีจัดกลุ่มและสรุปข้อมูลใน R
วิธีกรองแถวใน R
วิธีลบบรรทัดที่ซ้ำกันใน R