2012-03-07 7 views
39

У меня есть столбец данных, который является фактором с уровнями A, B и C. Меня интересует объединение двух из этих уровней в один фактор, поэтому он станет A и B, с B = B и C, или, может быть, с новой переменной A и D, с D = B и C. Я могу придумать много способов сделать это, пройдя через столбец с операторами if, но я чувствую, что должно быть более элегантный подход, и мне было интересно, может ли кто-нибудь указать мне в правильном направлении.Группировка 2 уровней фактора в R

+3

Более поздние, лучше ответ: http://stackoverflow.com/questions/19410108/cleaning-up-factor- уровни-коллапс-многоуровневые метки –

ответ

70

Используйте levels(x) <- ..., чтобы указать новые уровни и объединить некоторые предыдущие уровни. Например:

f <- factor(LETTERS[c(1:3, 3:1)]) 
f 
[1] A B C C B A 
Levels: A B C 

Теперь соединим "A" и "B" в один уровень:

levels(f) <- c("A", "A", "C") 
f 
[1] A A C C A A 
Levels: A C 
+0

Насколько я мог надеяться, спасибо! – asjohnson

+0

Это полезно, спасибо вам обоим. – Rhubarb

+0

Есть ли способ сделать это в dplyr? – Hatshepsut

9

Если вы используете dplyr трубы вы можете использовать forcats пакет.

library(forcats) 
f %>% fct_collapse(A = c("A","B")) 

#[1] A A C C A A 
#Levels: A C 
2

Библиотека rockchalk способна сочетать уровни. Я думаю, его хорошо, если вы хотите совместить B и C вместе в фактор сделать это:

library(rockchalk) 
combineLevels(mydf$facVar,levs = c("B", "C"), newLabel = c("BandC")) 
Смежные вопросы