Порядок столбцов таблицы R при включении пустой строки - PullRequest
2 голосов
/ 17 июня 2010

У меня есть ряд значений, которые включают в себя пустую строку

уровней (mydata $ phone_partner_products) "" "dont_know" "может_интересный"
"не_интересный" "очень_интересный" "very_not_interesting"

Если я создаю таблицу частот, я получаю эту таблицу (mydata $ phone_partner_products)

                            dont_know    maybe_interesting 
            3752                  226                 2907 
 not_interesting     very_interesting very_not_interesting 
            1404                 1653                 1065

Как я могу изменить порядок столбцов более осмысленным образом?Как мне переименовать пустую строку "" уровня?

Заранее большое спасибо.

Ответы [ 2 ]

4 голосов
/ 17 июня 2010

Используйте levels() для сброса уровня фактора, который вы хотите изменить:

> ff <- as.factor(sample(c("foo", "", "bar"),20,repl=TRUE))
> table(ff)
ff
    bar foo 
  6   8   6 
> levels(ff)
[1] ""    "bar" "foo"
> levels(ff)[1] <- "ooops"
> table(ff)
ff
ooops   bar   foo 
    6     8     6 
> 
2 голосов
/ 18 июня 2010

Важно, что делать не использовать 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...