วิธีแก้ไข: จำนวนสินค้าที่จะเปลี่ยนไม่ใช่ผลคูณของความยาวในการเปลี่ยน


ข้อผิดพลาดที่คุณอาจพบใน R คือ:

 Warning message:
  number of items to replace is not a multiple of replacement length

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามแทนที่องค์ประกอบจำนวนหนึ่งในคอลัมน์เวกเตอร์หรือกรอบข้อมูล (สมมติว่ามี 3 องค์ประกอบ) ด้วยจำนวนองค์ประกอบที่แตกต่างกัน (สมมติว่ามี 6 องค์ประกอบ)

บทช่วยสอนนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดนี้อย่างชัดเจน

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

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R โดยมีค่าหายไปบางส่วนในคอลัมน์แรก:

 #create data frame
df <- data. frame (a=c(3, NA, 7, NA, NA, 14),
                 b=c(4, 4, 5, 12, 13, 18))

#view data frame
df

   ab
1 3 4
2 NA 4
3 7 5
4 NA 12
5 NA 13
6 14 18

ตอนนี้ สมมติว่าเราพยายามแทนที่ค่าที่หายไปในคอลัมน์แรกด้วยค่าในคอลัมน์ที่สอง:

 #attempt to replace missing values in first column with values in second column
df$a[is. na (df$a)] <- df$b

Warning message:
In df$a[is.na(df$a)] <- df$b:
  number of items to replace is not a multiple of replacement length

เราได้รับข้อผิดพลาดเนื่องจากเราพยายามแทนที่ค่าที่หายไป 3 ค่าในคอลัมน์แรกด้วยค่า 6 ค่าในคอลัมน์ที่สอง

วิธีการแก้ไขข้อผิดพลาด

วิธีที่ง่ายที่สุดในการแก้ไขข้อผิดพลาดนี้คือการใช้คำสั่ง ifelse() :

 #replace missing values in column 'a' with corresponding values in column 'b'
df$a <- ifelse(is. na (df$a), df$b, df$a)

#view updated data frame
df

   ab
1 3 4
2 4 4
3 7 5
4 12 12
5 13 13
6 14 18

คำสั่ง ifelse() นี้จะตรวจสอบว่าค่าของคอลัมน์ “a” ว่างเปล่าหรือไม่ หากเป็นเช่นนั้น จะถูกแทนที่ด้วยค่าที่สอดคล้องกันในคอลัมน์ “b” ไม่เช่นนั้นจะปล่อยไว้ตามลำพัง

อีกวิธีในการแก้ไขข้อผิดพลาดนี้คือการแทนที่ค่าที่หายไปทั้งหมดด้วยหมายเลขเฉพาะ:

 #replace all missing values in column 'a' with zero
df$a[is. na (df$a)] <- 0

#view updated data frame
df

   ab
1 3 4
2 0 4
3 7 5
4 0 12
5 0 13
6 14 18

เมื่อใช้วิธีนี้ แต่ละค่าที่หายไปในคอลัมน์ “a” จะถูกแทนที่ด้วยศูนย์

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

วิธีแก้ไขใน R: NAs ที่ถูกบังคับโดยการบังคับ
วิธีซ่อมแซมใน R: ดัชนีอยู่นอกขอบเขต
วิธีแก้ไขใน R: ความยาวของวัตถุที่ยาวกว่าไม่ใช่ผลคูณของความยาวของวัตถุที่สั้นกว่า

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

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