วิธีแก้ไขใน r: ไม่อนุญาตให้มีค่าที่หายไปในการมอบหมายตัวห้อย


ข้อความแสดงข้อผิดพลาดที่คุณอาจพบเมื่อใช้ R คือ:

 Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณพยายามกำหนดค่าในคอลัมน์หนึ่งโดยใช้ค่าจากอีกคอลัมน์หนึ่ง แต่มีค่า NA อยู่

ตัวอย่างต่อไปนี้แสดงวิธีการแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ

วิธีการทำซ้ำข้อผิดพลาด

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

 #create data frame
df <- data. frame (A=c(3, 4, 4, NA, 5, 8, 5, 9),
                 B=c(12, 13, 7, 7, 12, 11, 15, 7))

#view data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 12
6 8 11
7 5 15
8 9 7

ตอนนี้ สมมติว่าเราพยายามกำหนดค่า 10 ให้กับแต่ละแถวในคอลัมน์ B โดยที่ค่าที่สอดคล้องกันในคอลัมน์ A คือ 5:

 #attempt to assign column B a value of 10 where A is equal to 5
df[df$A == 5, ]$B <- 10

Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

เราได้รับข้อผิดพลาดเนื่องจากมีค่า NA ในคอลัมน์ A และข้อความแสดงข้อผิดพลาดแจ้งให้เราทราบอย่างชัดเจนว่า ไม่อนุญาตให้ใช้ค่าที่หายไปในการกำหนดตัวห้อยของเฟรมข้อมูล

วิธีการหลีกเลี่ยงข้อผิดพลาด

มีสองวิธีในการหลีกเลี่ยงข้อผิดพลาดนี้

1. ใช้ตัวดำเนินการ %in%

วิธีหนึ่งในการหลีกเลี่ยงข้อผิดพลาดนี้คือการใช้ตัวดำเนินการ %in% เมื่อดำเนินการกำหนด:

 #assign column B a value of 10 where A is equal to 5
df[df$A %in% 5,]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

โปรดทราบว่ามีการกำหนดค่า 10 ให้กับแต่ละแถวในคอลัมน์ B โดยที่ค่าที่สอดคล้องกันในคอลัมน์ A คือ 5 และเราไม่ได้รับข้อผิดพลาด

2. ใช้ is.na()

อีกวิธีหนึ่งในการหลีกเลี่ยงข้อผิดพลาดนี้คือการใช้ฟังก์ชัน is.na() เมื่อดำเนินการมอบหมายงาน:

 #assign column B a value of 10 where A is equal to 5
df[!is. na (df$A) & df$A == 5, ]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

ขอย้ำอีกครั้งว่าเราสามารถกำหนดค่า 10 ให้กับแต่ละแถวในคอลัมน์ B โดยที่ค่าที่สอดคล้องกันในคอลัมน์ A คือ 5 และเราไม่ได้รับข้อผิดพลาด

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

บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่น ๆ ใน R:

วิธีแก้ไขในอาร์กิวเมนต์ R: เกี่ยวข้องกับจำนวนบรรทัดที่แตกต่างกัน
วิธีแก้ไขใน R: ข้อผิดพลาดในการเลือกอาร์กิวเมนต์ที่ไม่ได้ใช้
วิธีการซ่อมแซมใน R: การเปลี่ยนมีความยาวเป็นศูนย์

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

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