在新数据框中使用因子变量时如何保持水平

How to keep levels when using factor variables in a new dataframe

我希望这是一个基本问题;但是,我查看了所有建议的帖子并自行搜索,但找不到答案。我只是想知道为什么如果我根据现有数据框的因子变量创建一个新数据框,我似乎会失去水平。为什么会发生这种情况以及如何使用因子变量保持水平?这是一个可重现的示例来演示:

data(iris)
str(iris) # Species variable is of the class factor
iris.lm <- lm(Petal.Width ~ Species, iris) # Fit a simple model
summary(iris.lm) # Levels are displayed

# Now I make a new dataframe to do some fit quality checks
iris.plots <- as.data.frame(cbind(iris$Species, iris$Petal.Width, fitted(iris.lm),residuals(iris.lm)))
names(iris.plots) <- c("Species", "Observed", "Predicted", "Residuals")

# In the scatter plot to view Residuals by predictor (Species, of factor class), I have not maintained the levels.
plot(x = iris.plots$Species, y = iris.plots$Residuals)
head(iris.plots) # Confirming that I "lost" the levels

感谢您的帮助!

当您在数字向量(即使其中之一是因子)上使用 cbind 时,您会收到矩阵作为输出,没有任何水平信息。为了防止它,例如,您可以将 iris$Species 的列作为数据框传递:

iris.plots <- cbind(as.data.frame(iris$Species), iris$Petal.Width, fitted(iris.lm),residuals(iris.lm))

现在,cbind 将第一列识别为 data.frame 并使用数据框的方法版本,从而保留级别。