Як виправити: помилка в 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

Стовпець team – це стовпець символів, який викликає помилку під час спроби використати функцію 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: заміна має нульову довжину

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *