Пожалуйста, объясните, как мы преобразовываем факторную переменную в числовую в R - PullRequest
0 голосов
/ 13 ноября 2018

Может кто-нибудь объяснить, как как .numeric (уровни (x)) [x] точно работают? здесь x - факторная переменная (например, x <-as.factor (пример (1: 5,20, replace = TRUE)) </strong>) Насколько я могу понять, это то, что сначала мы получаем уровни x (которые будут символьными, после этого мы меняем их на числовые. Что происходит после этого, я не могу получить. Я знаю, что это представление такое же как как числовой (как символ (х)) .

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Я всегда путал с факторами Р. Обычно я использую идеальную идею из пакета Rfast , функции Rfast::ufactor. Он представляет собой фактор, использующий его начальный тип.

Вот пример:

x <- rnorm(10)
fx<- Rfast::ufactor(x)
fx$levels # you can get the levels like this
fx$values # you can get the values like this

Быстро и просто. Rfast::ufactor намного быстрее, чем R, но я не буду публиковать какие-либо тесты, потому что он не подходит к вопросу.

0 голосов
/ 13 ноября 2018

R факторы - это векторы целых чисел, которые служат индексами для вектора символов уровней.Таким образом, внутренняя часть этого выражения создает символьный вектор.Внешняя часть преобразует набор значений: «5», «2», «4» .... и т. Д. В числовые значения.

> x<-as.factor(sample(1:5,20,replace=TRUE)) 

Класс хранения факторных объектов - целое число:

> dput (x)
structure(c(4L, 2L, 3L, 4L, 5L, 2L, 2L, 2L, 1L, 2L, 4L, 2L, 1L, 
5L, 5L, 4L, 1L, 5L, 1L, 5L), .Label = c("1", "2", "3", "4", "5"
), class = "factor")

Функция levels () возвращает атрибут фактора .Label, а когда фактор используется в качестве индекса, он обрабатывается как целое число:

> levels(x)[x]
 [1] "4" "2" "3" "4" "5" "2" "2" "2" "1" "2" "4" "2" "1" "5" "5" "4" "1" "5" "1" "5"

Этот методпреобразования или извлечения немного быстрее, чем as.character(x), но, как вы уже видели, это может показаться немного загадочным, если вы не проработали то, что происходит "под капотом" (или "капот", если это так называетсяваша часть англоговорящего мира.)

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