Есть ли простой способ восстановить факторный объект из его сводки? - PullRequest
2 голосов
/ 07 октября 2011

Например:

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 Ответ

5 голосов
/ 07 октября 2011

В вашем конкретном примере вы можете использовать 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"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...