创建数据框时,您可以选择将字符串列设为因子 ( 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)