วิธีใช้ฟังก์ชันกับแต่ละแถวของเมทริกซ์หรือเฟรมข้อมูลใน r
คุณสามารถใช้ฟังก์ชัน Apply() เพื่อใช้ฟังก์ชันกับแต่ละแถวของเมทริกซ์หรือกรอบข้อมูลใน R
ฟังก์ชันนี้ใช้ไวยากรณ์พื้นฐานต่อไปนี้:
ใช้ (X, มาร์จิ้น, สนุก)
ทอง:
- X: ชื่อของเมทริกซ์หรือบล็อกข้อมูล
- ขอบ: มิติที่จะดำเนินการ ใช้ 1 สำหรับแถว, 2 สำหรับคอลัมน์
- FUN: ฟังก์ชั่นที่จะใช้
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ
ตัวอย่างที่ 1: ใช้ฟังก์ชันกับแต่ละแถวของเมทริกซ์
สมมติว่าเรามีเมทริกซ์ต่อไปนี้ใน R:
#create matrix mat <- matrix(1:15, nrow= 3 ) #view matrix mast [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15
เราสามารถใช้ฟังก์ชัน Apply() เพื่อนำฟังก์ชันต่างๆ ไปใช้กับแถวของเมทริกซ์ได้:
#find mean of each row apply(mat, 1, mean) [1] 7 8 9 #find sum of each row apply(mat, 1, sum) [1] 35 40 45 #find standard deviation of each row apply(mat, 1, sd) [1] 4.743416 4.743416 4.743416 #multiply the value in each row by 2 (using t() to transpose the results) t(apply(mat, 1, function (x) x * 2)) [,1] [,2] [,3] [,4] [,5] [1,] 2 8 14 20 26 [2,] 4 10 16 22 28 [3,] 6 12 18 24 30 #normalize every row to 1 (using t() to transpose the results) t(apply(mat, 1, function (x) x / sum(x) )) [,1] [,2] [,3] [,4] [,5] [1,] 0.02857143 0.1142857 0.2 0.2857143 0.3714286 [2,] 0.05000000 0.1250000 0.2 0.2750000 0.3500000 [3,] 0.06666667 0.1333333 0.2 0.2666667 0.3333333
โปรดทราบว่าหากคุณต้องการหาค่าเฉลี่ยหรือผลรวมของแต่ละแถว การใช้ฟังก์ชัน rowMeans() หรือ rowSums() ในตัวจะเร็วกว่า:
#find mean of each row rowMeans(mat) [1] 7 8 9 #find sum of each row rowSums(mat) [1] 35 40 45
ตัวอย่างที่ 2: ใช้ฟังก์ชันกับแต่ละแถวของกรอบข้อมูล
สมมติว่าเรามีเมทริกซ์ต่อไปนี้ใน R:
#create data frame df <- data. frame (var1=1:3, var2=4:6, var3=7:9, var4=10:12, var5=13:15) #view data frame df var1 var2 var3 var4 var5 1 1 4 7 10 13 2 2 5 8 11 14 3 3 6 9 12 15
เราสามารถใช้ฟังก์ชัน Apply() เพื่อใช้ฟังก์ชันต่างๆ กับแถวของกรอบข้อมูล:
#find mean of each row apply(df, 1, mean) [1] 7 8 9 #find sum of each row apply(df, 1, sum) [1] 35 40 45 #find standard deviation of each row apply(df, 1, sd) [1] 4.743416 4.743416 4.743416 #multiply the value in each row by 2 (using t() to transpose the results) t(apply(df, 1, function (x) x * 2)) var1 var2 var3 var4 var5 [1,] 2 8 14 20 26 [2,] 4 10 16 22 28 [3,] 6 12 18 24 30 #normalize every row to 1 (using t() to transpose the results) t(apply(df, 1, function (x) x / sum(x) )) var1 var2 var3 var4 var5 [1,] 0.02857143 0.1142857 0.2 0.2857143 0.3714286 [2,] 0.05000000 0.1250000 0.2 0.2750000 0.3500000 [3,] 0.06666667 0.1333333 0.2 0.2666667 0.3333333
เช่นเดียวกับเมทริกซ์ หากคุณต้องการหาค่าเฉลี่ยหรือผลรวมของแต่ละแถว การใช้ฟังก์ชัน rowMeans() หรือ rowSums() ในตัวจะเร็วกว่า:
#find mean of each row rowMeans(df) [1] 7 8 9 #find sum of each row rowSums(df) [1] 35 40 45
แหล่งข้อมูลเพิ่มเติม
วิธีดึงหมายเลขบรรทัดใน R
วิธีเรียกใช้ฟังก์ชัน COUNTIF ใน R
วิธีเรียกใช้ฟังก์ชัน SUMIF ใน R