Як виправити в r: недійсний рівень фактора, створено na


Попередження, яке ви можете отримати під час використання R:

 Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
  invalid factor level, NA generated

Це попередження виникає, коли ви намагаєтеся додати значення до факторної змінної в R, яка ще не існує як визначений рівень.

У наступному прикладі показано, як на практиці реагувати на це попередження.

Як відтворити попередження

Припустимо, що ми маємо наступний кадр даних у R:

 #create data frame
df <- data. frame (team=factor(c('A', 'A', 'B', 'B', 'B')),
                 dots=c(99, 90, 86, 88, 95))

#view data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95

#view structure of data frame
str(df)

'data.frame': 5 obs. of 2 variables:
 $ team: Factor w/ 2 levels "A","B": 1 1 2 2 2
 $ points: num 99 90 86 88 95

Ми бачимо, що командна змінна є фактором з двома рівнями: «A» і «B»

Тепер припустімо, що ми спробуємо додати новий рядок у кінці кадру даних, використовуючи значення «C» для team :

 #add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C"):
  invalid factor level, NA generated

Ми отримуємо попередження, оскільки значення “C” ще не існує як рівень фактора для змінної team .

Важливо зауважити, що це лише попереджувальне повідомлення, і R усе одно додасть новий рядок у кінець кадру даних, але використовуватиме значення NA замість «C»:

 #view updated data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 NA 100

Як уникнути попередження

Щоб уникнути попередження про недійсний рівень фактора , нам потрібно спочатку перетворити факторну змінну на символьну, а потім ми зможемо перетворити її назад у факторну змінну після додавання нового рядка:

 #convert team variable to character
df$team <- as. character (df$team)

#add new row to end of data frame
df[nrow(df) + 1,] = c('C', 100)

#convert team variable back to factor
df$team <- as. factor (df$team)

#view updated data frame
df

  team points
1 to 99
2 to 90
3 B 86
4 B 88
5 B 95
6 C 100

Зауважте, що нам вдалося успішно додати новий рядок у кінець кадру даних і уникнути попередження.

Ми також можемо перевірити, що значення «C» було додано як рівень фактора до змінної team :

 #view structure of updated data frame
str(df)

'data.frame': 6 obs. of 2 variables:
 $ team: Factor w/ 3 levels "A","B","C": 1 1 2 2 2 3
 $points: chr "99" "90" "86" "88" ...

Додаткові ресурси

У наступних посібниках пояснюється, як виправити інші типові помилки в R:

Як виправити в R: аргументи містять різну кількість рядків
Як виправити в R: помилку під час вибору невикористаних аргументів
Як відремонтувати в R: заміна має нульову довжину

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

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