Я был удивлен, увидев, что R объединяет факторы в число при конкатенации векторов. Это происходит даже тогда, когда уровни одинаковы. Например:
> facs <- as.factor(c("i", "want", "to", "be", "a", "factor", "not", "an", "integer"))
> facs
[1] i want to be a factor not an integer
Levels: a an be factor i integer not to want
> c(facs[1 : 3], facs[4 : 5])
[1] 5 9 8 3 1
Какой идиоматический способ сделать это в R (в моем случае эти векторы могут быть довольно большими)? Спасибо.
Вау, я никогда не понимал, что это такое. Вот обходной путь:
x <- c(facs[1 : 3], facs[4 : 5])
x <- factor(x, levels=1:nlevels(facs), labels=levels(facs))
x
С выходными данными:
[1] i want to be a
Levels: a an be factor i integer not to want
Это будет работать, только если два вектора имеют такие же уровни, как здесь.
Альтернативный обходной путь - преобразовать множитель в вектор символов, а затем преобразовать обратно, когда конкатенация завершится.
cfacs <- as.character(facs)
x <- c(cfacs[1:3], cfacs[4:5])
# Now choose between
factor(x)
# and
factor(x, levels = levels(facs))