Важно, что делать не использовать levels()
для изменения порядка уровней .levels()
просто дает вам доступ к меткам индексов, а переупорядочивание меток не регулирует порядок уровней.
> set.seed(20)
> x <- factor(sample(c("Men","Women"), 100, replace = T))
> table(x)
x
Men Women
57 43
> levels(x) <- c("Women","Men")
> table(x)
x
Women Men
57 43
Все, что вы здесь сделали, - переименовали уровни.В исходном образце было 57 мужчин, а затем вы переименовали мужчин в «женщин».Это не изменило порядок уровней.Если вы допустите эту ошибку, это может разрушить весь ваш анализ!
Для этого используйте функцию relevel()
.По умолчанию он перемещает уровень, соответствующий символьному аргументу, в позицию первого уровня.Вы также можете передать ему вектор символов.
> set.seed(20)
> x <- factor(sample(c("Men","Women"), 100, replace = T))
> table(x)
x
Men Women
57 43
> x <- relevel(x, "Women")
> table(x)
x
Women Men
43 57
Это сделало соответствующую вещь и изменило порядок уровней, а не только их имя.
Также есть reorder()
функция, которая будет правильно переупорядочивать уровни фактора в соответствии с их значением для некоторой другой непрерывной переменной.
> table(x)
x
Women Men
43 57
> set.seed(20)
> value <- rnorm(100)
> tapply(value, x, mean)
Women Men
0.1679080 -0.1180567
> x <- reorder(x, value, mean)
> table(x)
x
Men Women
57 43