Одно предупреждающее сообщение, с которым вы можете столкнуться при использовании 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')),
points=c(99, 90, 86, 88, 95))
#view data frame
df
team points
1 A 99
2 A 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
Мы видим, что переменная team представляет собой фактор с двумя уровнями: «A» и «B».
Теперь предположим, что мы пытаемся добавить новую строку в конец фрейма данных, используя значение «C» для команды :
#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» еще не существует в качестве уровня фактора для переменной команды .
Важно отметить, что это просто предупреждающее сообщение, и R по-прежнему добавит новую строку в конец фрейма данных, но будет использовать значение NA вместо «C»:
#view updated data frame
df
team points
1 A 99
2 A 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 A 99
2 A 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: замена имеет нулевую длину