Как сохранить уровни при использовании факторных переменных в новом фрейме данных - PullRequest
0 голосов
/ 23 марта 2019

Я ожидаю, что это основной вопрос; Тем не менее, я просмотрел все предложенные сообщения и искал себя, и я не мог найти ответ. Я просто хочу знать, почему, если я создаю новый фрейм данных на основе факторных переменных из существующего, я, похоже, теряю уровни. Почему это происходит и как я могу сохранить уровни с помощью факторной переменной? Вот воспроизводимый пример для демонстрации:

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 Ответ

1 голос
/ 23 марта 2019

Когда вы используете cbind для числовых векторов (даже если один из них является множителем), в качестве выхода вы получаете матрицу без какой-либо информации об уровнях. Чтобы предотвратить это, вы можете, например, передать столбец iris$Species в качестве фрейма данных:

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

Теперь cbind распознает первый столбец как data.frame и использует версию метода для фреймов данных, которая сохраняет уровни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...