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

时间:2019-03-22 21:34:29

标签: r dataframe factors levels

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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

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