วิธีเลือกแถวแรกตามกลุ่มโดยใช้ dplyr
บ่อยครั้ง คุณอาจต้องการเลือกแถวแรกของแต่ละกลุ่มโดยใช้แพ็คเกจ dplyr ใน R คุณสามารถใช้ไวยากรณ์พื้นฐานต่อไปนี้เพื่อทำสิ่งนี้:
df %>% group_by (group_var) %>% arrange (values_var) %>% filter (row_number()== 1 )
ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟังก์ชันนี้ในทางปฏิบัติ
ตัวอย่าง: เลือกแถวแรกตามกลุ่มใน R
สมมติว่าเรามีชุดข้อมูลต่อไปนี้ใน R:
#create dataset df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C' ), points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17)) #view dataset df team points 1 to 4 2 to 9 3 to 7 4 B 7 5 B 6 6 B 13 7 C 8 8 C 8 9 C 4 10 C 17
รหัสต่อไปนี้แสดงวิธีใช้แพ็คเกจ dplyr เพื่อเลือกแถวแรกตามกลุ่มใน R:
library (dplyr) df %>% group_by (team) %>% arrange (points) %>% filter (row_number()== 1 ) # A tibble: 3 x 2 # Groups: team [3] team points 1 to 4 2 C 4 3 B 6
ตามค่าเริ่มต้น Arrange() จะเรียงลำดับค่าจากน้อยไปมาก แต่เราสามารถเรียงลำดับค่าจากมากไปหาน้อยได้อย่างง่ายดาย:
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== 1 ) # A tibble: 3 x 2 # Groups: team [3] team points 1 C 17 2 B 13 3 to 9
โปรดทราบว่าคุณสามารถแก้ไขโค้ดนี้ได้อย่างง่ายดายเพื่อเลือกแถว ที่ n ในแต่ละกลุ่ม เพียงแค่เปลี่ยน row_number() == n
ตัวอย่างเช่น หากคุณต้องการเลือกแถวที่ 2 ตามกลุ่ม คุณสามารถใช้ไวยากรณ์ต่อไปนี้:
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== 2 )
หรือคุณสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อเลือกแถวสุดท้ายตามกลุ่ม:
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== n() )
แหล่งข้อมูลเพิ่มเติม
วิธีจัดเรียงเส้นใน R
วิธีนับการสังเกตต่อกลุ่มใน R
วิธีค้นหาค่าสูงสุดต่อกลุ่มใน R