Предупреждающее сообщение: в'...`: недопустимый уровень фактора, сгенерированный NA
Я не понимаю, почему я получил это предупреждение.
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
invalid factor level, NA generated
> fixed
Type Amount
1 <NA> 100
2 0
3 0
4 ответов
предупреждающее сообщение потому, что ваша переменная" тип "была сделана фактором, а" обед " не был определен уровень. Используйте stringsAsFactors = FALSE
флаг при создании фрейма данных, чтобы заставить "тип" быть символом.
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> str(fixed)
'data.frame': 3 obs. of 2 variables:
$ Type : Factor w/ 1 level "": NA 1 1
$ Amount: chr "100" "0" "0"
>
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3),stringsAsFactors=FALSE)
> fixed[1, ] <- c("lunch", 100)
> str(fixed)
'data.frame': 3 obs. of 2 variables:
$ Type : chr "lunch" "" ""
$ Amount: chr "100" "0" "0"
Если Вы читаете непосредственно из CSV-файла, то сделайте так.
myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)
здесь гибкий подход, его можно использовать во всех случаях, в частности:
- to влияет только на один столбец или
- на
dataframe
было получено из применения предыдущих операций (например,не сразу открыть файл, или создание нового фрейма данных).
во-первых, un-factorize в строку
самый простой способ исправить это-добавить новый фактор в столбец. Используйте функцию уровнях, чтобы определить, сколько факторов у вас есть, а затем добавить новый фактор.
> levels(data$Fireplace.Qu)
[1] "Ex" "Fa" "Gd" "Po" "TA"
> levels(data$Fireplace.Qu) = c("Ex", "Fa", "Gd", "Po", "TA", "None")
[1] "Ex" "Fa" "Gd" "Po" " TA" "None"