วิธีใช้ฟังก์ชันกับแต่ละแถวของเมทริกซ์หรือเฟรมข้อมูลใน 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

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

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