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

问题描述 投票:0回答:1

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

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

谢谢你的帮助!

r dataframe factors levels
1个回答
1
投票

当你在数字向量上使用cbind时(即使其中一个是因子),作为输出你接收矩阵,没有任何级别的信息。为了防止这种情况,您可以将iris$Species列作为数据框传递:

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

现在,cbind认识到第一列是data.frame并使用数据帧的方法版本,这保留了级别。

© www.soinside.com 2019 - 2024. All rights reserved.