Этот вопрос связан с 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
После повторной маркировки первоначальные значения навсегда теряются. 'as.numeric()' всегда будет возвращать 1 для первого уровня, 2 для второго и т. д. Не имеет значения, каковы фактические/оригинальные метки или значения. – MrFlick
Это хорошо. Я боялся, что в таком случае 'as.numeric()' может каким-то образом вернуть исходные значения, которые могут привести к хаосу, если я должен представить кому-то свой фрейм данных как числовой только фрейм данных, используя 'as.numeric()' на всех (факторных) столбцах. –