วิธีแก้ไข: ข้อผิดพลาดใน colmeans(x, na.rm = true): 'x' ต้องเป็นตัวเลข


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

 Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

โดยทั่วไปข้อผิดพลาดนี้จะเกิดขึ้นเมื่อคุณพยายามใช้ฟังก์ชัน prcomp() เพื่อทำการ วิเคราะห์องค์ประกอบหลักใน R เมื่อคอลัมน์อย่างน้อยหนึ่งคอลัมน์ในกรอบข้อมูลที่คุณใช้ไม่ใช่ตัวเลข

มีสองวิธีในการแก้ไขข้อผิดพลาดนี้:

วิธีที่ 1: แปลงคอลัมน์ที่ไม่ใช่ตัวเลขเป็นคอลัมน์ตัวเลข

วิธีที่ 2: เอาคอลัมน์ที่ไม่ใช่ตัวเลขออกจากกรอบข้อมูล

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

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

สมมติว่าเรากำลังพยายามวิเคราะห์องค์ประกอบหลักในกรอบข้อมูลต่อไปนี้ซึ่งมีคอลัมน์อักขระ:

 #create data frame
df <- data. frame (team=c('A', 'A', 'C', 'B', 'C', 'B', 'B', 'C', 'A'),
                 points=c(12, 8, 26, 25, 38, 30, 24, 24, 15),
                 rebounds=c(10, 4, 5, 5, 4, 3, 8, 18, 22))

#view data frame
df

  team points rebounds
1 to 12 10
2 to 8 4
3 C 26 5
4 B 25 5
5 C 38 4
6 B 30 3
7 B 24 8
8 C 24 18
9 to 15 22

#attempt to calculate principal components
prcomp(df)

Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

คอลัมน์ ทีม เป็นคอลัมน์อักขระ ซึ่งทำให้เกิดข้อผิดพลาดเมื่อพยายามใช้ฟังก์ชัน prcomp()

วิธีที่ 1: แปลงคอลัมน์ที่ไม่ใช่ตัวเลขเป็นคอลัมน์ตัวเลข

วิธีหนึ่งในการหลีกเลี่ยงข้อผิดพลาดนี้คือการแปลงคอลัมน์ ทีม เป็นคอลัมน์ตัวเลขก่อนที่จะใช้ฟังก์ชัน prcomp() :

 #convert character column to numeric
df$team <- as. numeric (as. factor (df$team))

#view updated data frame
df

  team points rebounds
1 1 12 10
2 1 8 4
3 3 26 5
4 2 25 5
5 3 38 4
6 2 30 3
7 2 24 8
8 3 24 18
9 1 15 22

#calculate main components
prcomp(df)

Standard deviations (1, .., p=3):
[1] 9.8252704 6.0990235 0.4880538

Rotation (nxk) = (3 x 3):
                 PC1 PC2 PC3
team -0.06810285 0.04199272 0.99679417
points -0.91850806 0.38741460 -0.07907512
rebounds 0.38949319 0.92094872 -0.01218661

ครั้งนี้เราไม่ได้รับข้อผิดพลาดใดๆ เนื่องจากแต่ละคอลัมน์ในกรอบข้อมูลเป็นตัวเลข

วิธีที่ 2: เอาคอลัมน์ที่ไม่ใช่ตัวเลขออกจากกรอบข้อมูล

อีกวิธีหนึ่งในการหลีกเลี่ยงข้อผิดพลาดคือการลบคอลัมน์ที่ไม่ใช่ตัวเลขทั้งหมดออกจากกรอบข้อมูลก่อนที่จะใช้ ฟังก์ชัน prcomp() :

 #remove non-numeric columns from data frame
df_new <- df[ , unlist(lapply(df, is. numeric ))]

#view new data frame
df_new

  rebound points
1 12 10
2 8 4
3 26 5
4 25 5
5 38 4
6 30 3
7 24 8
8 24 18
9 15 22

#calculate main components
prcomp(df_new)

Standard deviations (1, .., p=2):
[1] 9.802541 6.093638

Rotation (nxk) = (2 x 2):
                PC1 PC2
points 0.9199431 0.3920519
rebounds -0.3920519 0.9199431

ขอย้ำอีกครั้ง เราไม่ได้รับข้อผิดพลาดใดๆ เนื่องจากแต่ละคอลัมน์ในกรอบข้อมูลเป็นตัวเลข

หมายเหตุ : ในกรณีส่วนใหญ่ วิธีแรกคือวิธีแก้ปัญหาที่ต้องการ เนื่องจากจะใช้ข้อมูลทั้งหมดแทนที่จะลบบางคอลัมน์ออก

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

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

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

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

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