Это пресловутый stringsAsFactors=FALSE
. Для тех, кто читает его после R4.0, это больше не проблема, но в течение многих лет до 2020 года пользователи изо всех сил пытались вспомнить, что data.frame
(и as.data.frame()
, если на то пошло) автоматически переводит все строки в факторы.
Затем происходит то, что вы пытаетесь ввести новые уровни в фактор, а это не то, как это нужно делать в R. Если создание фактора не было намерением, вы могли бы просто изменить код создания фрейма данных.
df <- data.frame(N=c(1,2,3,4,5,6),
CAT=c('A','B','C','D','E','F'),
stringsAsFactors = FALSE)
Однако, если вы хотите создать коэффициент, вот как вы можете go изменить уровни и перекодировать один из уровней.
df <- data.frame(N=c(1,2,3,4,5,6),
CAT=c('A','B','C','D','E','F'),
stringsAsFactors = TRUE)
df
str(df)
#> 'data.frame': 6 obs. of 2 variables:
#> $ N : num 1 2 3 4 5 6
#> $ CAT: Factor w/ 6 levels "A","B","C","D",..: 1 2 3 4 5 6
levels(df$CAT)[levels(df$CAT)=="F"] <- "X"
df
#> N CAT
#> 1 1 A
#> 2 2 B
#> 3 3 C
#> 4 4 D
#> 5 5 E
#> 6 6 X