Когда вы создаете фрейм данных, у вас есть выбор: сделать ваши множители для строковых столбцов (stringsAsFactors=T
) или оставить их в виде строк.
Для вашего случая не делайте ваши столбцы строк факторами. Сохраняйте их как строки, тогда добавление работает нормально. Если вам нужно, чтобы они в конечном итоге были факторами, выполните всю вставку и добавление сначала как строку, а затем, наконец, преобразуйте их в фактор.
Если вы сделаете строковые столбцы факторами, а затем добавите строки, содержащие невидимые значения, вы получите ошибку, которую вы упомянули на каждом новом невидимом уровне факторов, и это значение будет заменено на NA ...
> df <- data.frame(patient=c('Ann','Bob','Carol'), referring_doctor=c('X','Y','X'), stringsAsFactors=T)
patient referring_doctor
1 Ann X
2 Bob Y
3 Carol X
> df <- rbind(df, c('Denise','Z'))
Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = "Denise") :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = "Z") :
invalid factor level, NA generated
> df
patient referring_doctor
1 Ann X
2 Bob Y
3 Carol X
4 <NA> <NA>
Так что не делайте ваши строковые столбцы факторами. Держите их как строки, тогда добавление отлично работает :
> df <- data.frame(patient=c('Ann','Bob','Carol'), referring_doctor=c('X','Y','X'), stringsAsFactors=F)
> df <- rbind(df, c('Denise','Z'))
patient referring_doctor
1 Ann X
2 Bob Y
3 Carol X
4 Denise Z
Чтобы изменить поведение по умолчанию :
options(stringsAsFactors=F)
Для преобразования отдельных столбцов в / из строки или множителя
df$col <- as.character(df$col)
df$col <- as.factor(df$col)