2016-03-28 2 views

ответ

1

Вы можете сделать что-то вроде этого:

labs = letters[3:7] 
vec = rep(1:5,2) 
factorVec <- factor(x=vec, levels=sort(unique(vec)), labels = c("c", "d", "e", "f", "g")) 

Я отсортировали unique(vec), таким образом, чтобы результаты последовательны. unique() вернет уникальные значения, основанные на первом вхождении элемента. Указав заказ, код становится более надежным.

Также, указав уровни и метки обоих, я думаю, что код станет более читаемым.

EDIT

Если вы смотрите в документации с использованием ?factor, вы найдете:

уровни
дополнительный вектор значений (в виде строк символов), что х может быть принято , По умолчанию используется уникальный набор значений, сделанных as.character (x), отсортированный в возрастающий порядок x. Обратите внимание, что этот набор можно указать как меньший, чем sort (unique (x))

Итак, вы можете заметить, что внутри самой факторной фракции происходит некоторая сортировка. Но я считаю, что нужно добавить информацию о уровнях, чтобы сделать код более удобочитаемым.

+1

hmm ... Как насчет только 'factor (vec, labels = labs)'? –

+0

Какой элемент лаборатории назначен тому элементу исходного вектора, не будет ясным, если уровни не указаны. В своей работе я совершил эту ошибку и стал мудрее после того, как ее поймали с поличным, когда мой начальник поймал эту мою ошибку. –

+0

Кумар, спасибо за помощь. Я согласен с тем, что просмотр «уровней» и «ярлыков» избавил бы меня от путаницы, которая заставила меня задать этот довольно простой вопрос, но (удивительно?) В решении Дэвида Аренбурга маркировка разобралась в порядке, даже если вы испортили «vec», чтобы первые появления уникальных значений НЕ отсортировались. – Amitai