2014-10-29 4 views
1

Этот вопрос связан с Convert factor to integer и How to convert a factor to an integer\numeric without a loss of information, но имеет несколько иную проблему с типом принуждения.Преобразование коэффициента в числовое число после перемаркировки

Два первого вопроса, кажется, рассматривает дела были фактор явно построен из ранее существующего вектора класса numeric или класса integer без расстановки меток в levels. В этих случаях:

f <- factor(c("1","2","1","2")) 
as.numeric(levels(f))[f] 

возвращается

# [1] 1 2 1 2 

, но когда я переобозначим уровни:

f <- factor(c("1","2","1","2")) 
f <- factor(f, 
      levels = c(1, 2), 
      labels = c("a", "b")) 
as.numeric(levels(f))[f] 

я доберусь

# [1] NA NA NA NA 
# Warning message: 
# NAs introduced by coercion 

тогда

as.numeric(f) 

возвращает

# [1] 1 2 1 2 

Что такое правильный порядок в таком случае, чтобы получить исходные значения обратно? Это всего лишь as.numeric(f)?

В случае, если это отношение:

> sessionInfo() 
R version 3.1.2 RC (2014-10-28 r66890) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_IE.UTF-8  LC_NUMERIC=C 
[3] LC_TIME=en_IE.UTF-8  LC_COLLATE=en_IE.UTF-8 
[5] LC_MONETARY=en_IE.UTF-8 LC_MESSAGES=en_IE.UTF-8 
[7] LC_PAPER=en_IE.UTF-8  LC_NAME=C 
[9] LC_ADDRESS=C    LC_TELEPHONE=C 
[11] LC_MEASUREMENT=en_IE.UTF-8 LC_IDENTIFICATION=C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 
loaded via a namespace (and not attached): 
[1] tools_3.1.2 
+1

После повторной маркировки первоначальные значения навсегда теряются. 'as.numeric()' всегда будет возвращать 1 для первого уровня, 2 для второго и т. д. Не имеет значения, каковы фактические/оригинальные метки или значения. – MrFlick

+0

Это хорошо. Я боялся, что в таком случае 'as.numeric()' может каким-то образом вернуть исходные значения, которые могут привести к хаосу, если я должен представить кому-то свой фрейм данных как числовой только фрейм данных, используя 'as.numeric()' на всех (факторных) столбцах. –

ответ

0

Если вы знаете, для определенности, что существует точное соответствие между исходными уровнями и основным фактором/целочисленным кодированием, то вы можете использовать as.numeric (е) , Но ... если исходный вектор был

f <- factor(c("2","3","2","3")) 

И вы изменили уровень-метку для значения альфа, то as.numeric (е) будет давать ошибочные результаты. Кодирование коэффициента всегда начинается с 1L.

Смежные вопросы