С тех пор, как этот вопрос был задан, Хэдли Уикхем создал пакет forcats
с функцией fct_c
, предназначенный для подобных задач.
> library(forcats)
> facs <- as.factor(c("i", "want", "to", "be", "a", "factor", "not", "an",
"integer"))
> fct_c(facs[1:3], facs[4:5])
[1] i want to be a
Levels: a an be factor i integer not to want
В качестве примечания, fct_c
также не являетсяне одурачены конкатенацией факторов, использующих несовпадающие числовые кодировки:
> x <- as.factor(c('c', 'z'))
> x
[1] c z
Levels: c z
> y <- as.factor(c('a', 'b', 'z'))
> y
[1] a b z
Levels: a b z
> c(x, y)
[1] 1 2 1 2 3
> fct_c(x, y)
[1] c z a b z
Levels: c z a b
> as.numeric(fct_c(x, y))
[1] 1 2 3 4 2