วิธีค้นหาค่าสูงสุดต่อกลุ่มใน 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

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

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