Dplyr: วิธีกลายพันธุ์ตัวแปรหากคอลัมน์มีสตริง


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

 library (dplyr)

df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))

ไวยากรณ์เฉพาะนี้ใช้ฟังก์ชัน scale() กับตัวแปรแต่ละตัวในกรอบข้อมูลที่มีสตริง “starter” ในชื่อคอลัมน์

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

ตัวอย่าง: กลายพันธุ์ตัวแปรหากคอลัมน์มีสตริง

สมมติว่าเรามี data frame ต่อไปนี้ใน R:

 #create data frame
df <- data. frame (team=c('A', 'B', 'C', 'D', 'E', 'F'),
                 starter_points=c(22, 26, 25, 13, 15, 22),
                 starter_assists=c(4, 5, 10, 14, 12, 10),
                 bench_points=c(7, 7, 9, 14, 13, 10),
                 bench_assists=c(2, 5, 5, 4, 9, 14))

#view data frame
df

  team starter_points starter_assists bench_points bench_assists
1 to 22 4 7 2
2 B 26 5 7 5
3 C 25 10 9 5
4 D 13 14 14 4
5 E 15 12 13 9
6 F 22 10 10 14

เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อใช้ฟังก์ชัน scale() กับแต่ละตัวแปรในกรอบข้อมูลที่มีสตริง “starter” ในชื่อคอลัมน์

 library (dplyr)

#apply scale() function to each variable that contains 'starter' in the name
df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))

  team starter_points starter_assists bench_points bench_assists
1 A 0.2819668 -1.3180158 7 2
2 B 1.0338784 -1.0629159 7 5
3 C 0.8459005 0.2125832 9 5
4 D -1.4098342 1.2329825 14 4
5 E -1.0338784 0.7227828 13 9
6 F 0.2819668 0.2125832 10 14

เมื่อใช้ไวยากรณ์นี้ เราสามารถใช้ฟังก์ชัน scale() เพื่อปรับขนาดแต่ละคอลัมน์ที่มี “starter” เพื่อให้ค่ามีค่าเฉลี่ยเป็น 0 และค่าเบี่ยงเบนมาตรฐานเป็น 1

โปรดทราบว่าคอลัมน์ต่อไปนี้ได้รับการแก้ไขแล้ว:

  • สตาร์ทเตอร์_พอยท์
  • สตาร์ทเตอร์_แอสซิสต์

คอลัมน์อื่นๆ ทั้งหมดยังคงไม่เปลี่ยนแปลง

โปรดทราบว่าเราสามารถใช้ฟังก์ชันใดก็ได้ที่เราต้องการโดยใช้ไวยากรณ์นี้

ในตัวอย่างก่อนหน้านี้ เราเลือกที่จะปรับขนาดแต่ละคอลัมน์ด้วยสตริง “starter” ในชื่อ

อย่างไรก็ตาม เราสามารถทำสิ่งที่ง่ายกว่านี้ได้ เช่น คูณค่าด้วย 2 สำหรับแต่ละคอลัมน์ที่มีคำว่า “starter” ในชื่อ:

 library (dplyr)

#multiply values by two for each variable that contains 'starter' in the name
df %>% mutate_at(vars(contains(' starter ')), ~ (. * 2 ))

  team starter_points starter_assists bench_points bench_assists
1 A 44 8 7 2
2 B 52 10 7 5
3 C 50 20 9 5
4 D 26 28 14 4
5 E 30 24 13 9
6 F 44 20 10 14

โปรดทราบว่าค่าของคอลัมน์ Starter_points และ Starter_assists จะถูกคูณด้วยสอง ในขณะที่คอลัมน์อื่นๆ ทั้งหมดยังคงไม่เปลี่ยนแปลง

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

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

วิธีลบแถวโดยใช้ dplyr
วิธีเลือกคอลัมน์ตามดัชนีโดยใช้ dplyr
วิธีกรองแถวที่มีสตริงบางตัวโดยใช้ dplyr

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

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