ตอบ: วิธีใช้ฟังก์ชัน apply() กับคอลัมน์เฉพาะ
บ่อยครั้งที่คุณอาจต้องการใช้ฟังก์ชัน Apply() เพื่อใช้ฟังก์ชันกับคอลัมน์เฉพาะในกรอบข้อมูลใน R
อย่างไรก็ตาม ฟังก์ชัน Apply() จะบังคับคอลัมน์ทั้งหมดใน Data Frame ให้มีประเภทออบเจ็กต์เดียวกันก่อนที่จะใช้ฟังก์ชัน ซึ่งบางครั้งอาจส่งผลที่ตามมาโดยไม่ได้ตั้งใจ
ตัวเลือกที่ดีกว่าคือฟังก์ชัน lapply() ซึ่งใช้ไวยากรณ์พื้นฐานต่อไปนี้:
df[c(' col1 ', ' col2 ')] <- lapply(df[c(' col1 ', ' col2 ')], my_function)
ตัวอย่างนี้ใช้ฟังก์ชัน my_function กับ col1 และ col2 ในกรอบข้อมูลเท่านั้น
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ
ตัวอย่าง: ใช้ฟังก์ชันกับคอลัมน์เฉพาะในกรอบข้อมูล
สมมติว่าเรามี data frame ต่อไปนี้ใน R:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(19, 22, 15, NA, 14, 25, 25, 25), rebounds=c(10, 6, 3, 7, 11, 13, 9, 12), assists=c(4, 4, 3, 6, 7, 5, 10, 8)) #view data frame df team points rebound assists 1 A 19 10 4 2 A 22 6 4 3 to 15 3 3 4 A NA 7 6 5 B 14 11 7 6 B 25 13 5 7 B 25 9 10 8 B 25 12 8
ตอนนี้ สมมติว่าเรากำหนดฟังก์ชันต่อไปนี้ซึ่งจะคูณค่าด้วย 2 แล้วบวก 1:
#define function
my_function <- function (x) x*2 + 1
เราสามารถใช้ฟังก์ชัน lapply() ต่อไปนี้เพื่อใช้ฟังก์ชันนี้กับ จุด และคอลัมน์ ที่ตีกลับ ในกรอบข้อมูลเท่านั้น:
#apply function to specific columns
df[c(' points ', ' rebounds ')] <- lapply(df[c(' points ', ' rebounds ')], my_function)
#view updated data frame
df
team points rebound assists
1 A 39 21 4
2 A 45 13 4
3 A 31 7 3
4 A NA 15 6
5 B 29 23 7
6 B 51 27 5
7 B 51 19 10
8 B 51 25 8
จากผลลัพธ์ เราจะเห็นว่าเราคูณแต่ละค่าในคอลัมน์ จุด และ รีบาวด์ ด้วย 2 แล้วบวกด้วย 1
โปรดทราบว่าคอลัมน์ ทีม และ แอสซิสต์ ยังคงไม่เปลี่ยนแปลง
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:
คำแนะนำในการใช้(), lapply(), sapply() และ tapply() ใน R
วิธีใช้ฟังก์ชันการแปลงใน R