Есть ли простой способ восстановить объект фактора из его сводки?

#r

#r

Вопрос:

Например:

 x <- c('A', 'A', 'B', 'C', 'C', 'C')
x <- as.factor(x)
print(summary(x))
  

даст результат:

 A B C 
2 1 3 
  

Теперь, если у меня есть именованный вектор:

 nv <- c(A=2, B=1, C=3)
  

Как я могу легко сохранить x в приведенном выше примере, не заботясь об их порядке?

Заранее спасибо.

Ответ №1:

В вашем конкретном примере вы можете использовать rep , но будьте осторожны: это не общее решение. На самом деле, я считаю, что общее решение невозможно, потому summary что отбрасывает информацию об исходном векторе.

 x <- factor(c('A', 'A', 'B', 'C', 'C', 'C'))
xs <- summary(x)

rep(names(xs), times=xs)
[1] "A" "A" "B" "C" "C" "C"
  

Причина, по которой это не является общим, заключается в том, что summary на самом деле просто дают таблицу непредвиденных обстоятельств, что приводит к потере информации о положении элементов. Например, если я возьму ваш вектор и добавлю еще несколько A символов в конец, посмотрите, что получится:

 x <- factor(c('A', 'A', 'B', 'C', 'C', 'C', 'A', 'A'))
xs <- summary(x)

rep(names(xs), times=xs)
[1] "A" "A" "A" "A" "B" "C" "C" "C"
  

(Теперь у вас есть отсортированный вектор со всеми правильными элементами, но не в правильном порядке.)

Комментарии:

1. Спасибо, Анфри! Возможно, я не был ясен в своем сообщении, но мне просто нужен вектор без порядка.

2. @Andrie это unname необходимо?

3. @pete Нет, вы правы — unname в данном случае это лишнее. Отредактированный ответ.