วิธีเลือกแถวแรกตามกลุ่มโดยใช้ 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

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

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