Как объединить факторы без их преобразования в целочисленный уровень?

Я был удивлен, увидев, что 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 (в моем случае эти векторы могут быть довольно большими)? Спасибо.

39
задан Rob 16 January 2017 в 03:22
поделиться

2 ответа

Вау, я никогда не понимал, что это такое. Вот обходной путь:

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

Это будет работать, только если два вектора имеют такие же уровни, как здесь.

6
ответ дан 27 November 2019 в 02:42
поделиться

Альтернативный обходной путь - преобразовать множитель в вектор символов, а затем преобразовать обратно, когда конкатенация завершится.

cfacs <- as.character(facs)
x <- c(cfacs[1:3], cfacs[4:5]) 

# Now choose between
factor(x)
# and
factor(x, levels = levels(facs))
9
ответ дан 27 November 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: