วิธีใช้ case_when() ใน dplyr


ฟังก์ชัน case_when() จากแพ็คเกจ dplyr ใน R สามารถใช้เพื่อสร้างตัวแปรใหม่จากตัวแปรที่มีอยู่

ฟังก์ชันนี้ใช้ไวยากรณ์พื้นฐานต่อไปนี้:

 library (dplyr)

df %>%
  mutate (new_var = case_when (var1 < 15 ~ ' low ',
                             var2 < 25 ~ ' med ',
                             TRUE ~ ' high '))

โปรดทราบว่า TRUE เทียบเท่ากับคำสั่ง “else”

ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟังก์ชันนี้ในทางปฏิบัติกับกรอบข้อมูลต่อไปนี้:

 #create data frame
df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'),
                 position = c('G', 'F', 'F', 'G', 'C', NA),
                 points = c(12, 15, 19, 22, 32, NA),
                 assists = c(5, 7, 7, 12, 11, NA))

#view data frame
df

  player position points assists
1 AJ G 12 5
2 Bob F 15 7
3 Chad F 19 7
4 Dan G 22 12
5 Eric C 32 11
6 Frank NA NA NA

ตัวอย่างที่ 1: สร้างตัวแปรใหม่จากตัวแปรที่มีอยู่

รหัสต่อไปนี้แสดงวิธีสร้างตัวแปรใหม่ที่เรียกว่า คุณภาพ ซึ่งค่าที่ได้มาจากคอลัมน์ คะแนน :

 df %>%
mutate (quality = case_when (points > 20 ~ ' high ',
                             points > 15 ~ ' med ',
                             TRUE ~ ' low ' ))

  player position points assists quality
1 AJ G 12 5 low
2 Bob F 15 7 low
3 Chad F 19 7 med
4 Dan G 22 12 high
5 Eric C 32 11 high
6 Frank NA NA NA low

นี่คือวิธีที่ฟังก์ชัน case_when() สร้างค่าสำหรับคอลัมน์ใหม่:

  • หากค่าในคอลัมน์คะแนนมากกว่า 20 แสดงว่าค่าในคอลัมน์คุณภาพจะเป็น “สูง”
  • มิฉะนั้น หากค่าในคอลัมน์คะแนนมากกว่า 15 ค่าในคอลัมน์คุณภาพจะเป็น “med”
  • มิฉะนั้น หากค่าในคอลัมน์คะแนนน้อยกว่าหรือเท่ากับ 15 (หรือค่าที่หายไป เช่น NA) ค่าในคอลัมน์คุณภาพจะเป็น “ต่ำ”

ตัวอย่างที่ 2: สร้างตัวแปรใหม่จากหลายตัวแปร

รหัสต่อไปนี้แสดงวิธีสร้างตัวแปรใหม่ที่เรียกว่า คุณภาพ ซึ่งค่าที่ได้มาจาก จุด และคอลัมน์ ช่วยเหลือ :

 df %>%
mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA average

โปรดทราบว่าเรายังสามารถใช้ฟังก์ชัน is.na() เพื่อกำหนดสตริงให้กับค่า NA ได้อย่างชัดเจน:

 df %>%
mutate (quality = case_when (is. na (points) ~ ' missing ',
                             points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA missing

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

วิธีจัดเรียงเส้นใน R
วิธีนับการสังเกตต่อกลุ่มใน R
วิธีกรองแถวที่มีสตริงบางตัวใน R

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

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