2013-06-03 4 views
0

Когда я извлекаю уровни факторов столбца кадра данных в R, они автоматически сортируются (в алфавитном порядке). Как я могу это предотвратить? То есть, я хотел бы, чтобы порядок уровней был идентичен порядку, присутствующему в столбце кадра данных.Предотвращение сортировки уровней факторов

data.frame(Names = c("Paul McCartney", "John Lennon")) -> my.data 
levels(my.data$Names) 

[1] «Джон Леннон» «Пол Маккартни»

+0

Зачем вам это нужно? Вы имеете дело с упорядоченным фактором? – Roland

+0

@Roland. Потому что вы спрашиваете. У меня есть столбец '' X'' в моем кадре данных, где только некоторые строки имеют значение. Я хочу извлечь значения в первом столбце ('' Names'') для этих строк. Я использую 'w = my.data [my.data $ X! =" NA ",] $ Names'', который возвращает эти значения, а также кучу' 'NA''. Поэтому я решил, что могу получить интересующие меня значения, посмотрев на '' levels (w) '', но их порядок не может измениться из исходного фрейма данных, так как я хочу сопоставить эти значения со своими значениями из '' X'' в исходном кадре данных позже. Вероятно, есть лучший способ сделать это ...: -/ – Sverre

+0

Да, есть лучший способ. Сделайте столбец символом и работайте с ним. – Roland

ответ

5

Переназначьте фактор после прочтения данных:

x <- data.frame(x=letters[c(2,1,2)], y=1:3) 
x$x 
## [1] b a b 
## Levels: a b 
x$x <- factor(x$x, levels=unique(x$x)) 
x$x 
## [1] b a b 
## Levels: b a 
1

Если вы хотите, чтобы предотвратить упорядочение факторов, которые необходимо конкретно передать уровни фактора более, как levels:

factor(c("Paul McCartney", "John Lennon"), levels = c("Paul McCartney", "John Lennon")) 
## [1] Paul McCartney John Lennon 
## Levels: Paul McCartney John Lennon 

В вашем случае вы должны создать factor, прежде чем создавать data.frame и вставлять factor в data.frame:

f1 <- factor(c("Paul McCartney", "John Lennon"), levels = c("Paul McCartney", "John Lennon")) 
my.data <- data.frame(Names = f1) 
levels(my.data$Names) 

## [1] "Paul McCartney" "John Lennon" 
+0

Проблема в том, что в моем реальном сценарии я имею дело с довольно большим набором данных, поэтому это не реально ... – Sverre

Смежные вопросы