Dplyr: วิธีใช้ mutate() ที่มีหลายเงื่อนไข


คุณสามารถใช้ไวยากรณ์พื้นฐานต่อไปนี้ใน dplyr เพื่อใช้ฟังก์ชัน mutate() เพื่อสร้างคอลัมน์ใหม่ตามเงื่อนไขหลายประการ:

 library (dplyr)

df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

ไวยากรณ์เฉพาะนี้สร้างคอลัมน์ใหม่ที่เรียกว่า คลาส ซึ่งรับค่าต่อไปนี้:

  • A_ดี ถ้าทีมเท่ากับ A และคะแนนมากกว่าหรือเท่ากับ 20
  • A_แย่ ถ้าทีมเท่ากับ A และแต้มน้อยกว่า 20
  • B_ดี ถ้าทีมเท่ากับ B และคะแนนมากกว่าหรือเท่ากับ 20
  • B_แย่ ถ้าไม่ตรงตามเงื่อนไขก่อนหน้านี้

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ

ที่เกี่ยวข้อง: วิธีใช้ case_when() ใน dplyr

ตัวอย่าง: ใช้ mutate() ใน dplyr ที่มีหลายเงื่อนไข

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ซึ่งมีข้อมูลเกี่ยวกับผู้เล่นบาสเกตบอลต่างๆ:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'),
                 points=c(22, 30, 34, 19, 14, 12, 39, 15, 22, 25))

#view data frame
df

   team points
1 to 22
2 to 30
3 to 34
4 to 19
5 to 14
6 B 12
7 B 39
8 B 15
9 B 22
10 B 25

เราสามารถใช้ไวยากรณ์ต่อไปนี้กับฟังก์ชัน mutate() เพื่อสร้างคอลัมน์ใหม่ที่เรียกว่า คลาส ซึ่งค่าจะขึ้นอยู่กับค่าในคอลัมน์ ทีม และ คะแนน :

 library (dplyr)
#add new column based on values in team and points columns
df <- df%>% mutate(class = case_when((team == ' A ' & points >= 20) ~ ' A_Good ',
                                     (team == ' A ' & points < 20) ~ ' A_Bad ',
                                     (team == ' B ' & points >= 20) ~ ' B_Good ',
                                      TRUE ~ ' B_Bad '))

#view updated data frame
df

   team points class
1 A 22 A_Good
2 A 30 A_Good
3 A 34 A_Good
4 A 19 A_Bad
5 A 14 A_Bad
6 B 12 B_Bad
7 B 39 B_Good
8 B 15 B_Bad
9 B 22 B_Good
10 B 25 B_Good

  คอลัมน์ คลาส ใหม่รับค่าตามค่าในคอลัมน์ ทีม และ คะแนน

ตัวอย่างเช่น แถวแรกมีค่า A ในคอลัมน์ ทีม และมีค่า คะแนน มากกว่าหรือเท่ากับ 20 ดังนั้นจึงได้รับค่า A_Good ในคอลัมน์ คลาส ใหม่

โปรดทราบว่าในตัวอย่างนี้ เราใช้สัญลักษณ์ & เป็นตัวดำเนินการ “AND” เพื่อตรวจสอบว่าเงื่อนไขทั้งสองเป็นจริงหรือไม่ ก่อนที่จะกำหนดค่าในคอลัมน์ คลาส

อย่างไรก็ตาม เราสามารถใช้ | เป็นตัวดำเนินการ “OR” เพื่อตรวจสอบว่าตรงตามเงื่อนไขข้อใดข้อหนึ่งจากสองเงื่อนไขหรือไม่ก่อนกำหนดค่าในคอลัมน์ คลาส

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่น ๆ ใน dplyr:

dplyr: วิธีกลายพันธุ์ตัวแปรหากคอลัมน์มีสตริง
dplyr: วิธีเปลี่ยนระดับแฟคเตอร์โดยใช้ mutate()
dplyr: วิธีใช้ฟังก์ชัน cross()

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

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