【问题标题】:How to keep levels when using factor variables in a new dataframe在新数据框中使用因子变量时如何保持水平
【发布时间】:2019-03-22 21:34:28
【问题描述】:

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

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】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多