Возможно только в случае, когда метки коэффициента соответствуют исходным значениям. Я объясню это на примере.
Предположим, данные являются векторными x
:
x <- c(20, 10, 30, 20, 10, 40, 10, 40)
Теперь я создам фактор с четырьмя метками:
f <- factor(x, levels = c(10, 20, 30, 40), labels = c("A", "B", "C", "D"))
1) x
с типом double, f
с типом integer. Это первая неизбежная потеря информации. Факторы всегда хранятся в виде целых чисел.
> typeof(x)
[1] "double"
> typeof(f)
[1] "integer"
2) Невозможно вернуться к исходным значениям (10, 20, 30, 40), имея только f
. Мы видим, что f
содержит только целые значения 1, 2, 3, 4 и два атрибута - список меток («A», «B», «C», «D») и атрибут класса «factor» , Ничего больше.
> str(f)
Factor w/ 4 levels "A","B","C","D": 2 1 3 2 1 4 1 4
> attributes(f)
$levels
[1] "A" "B" "C" "D"
$class
[1] "factor"
Чтобы вернуться к исходным значениям, мы должны знать значения уровней, используемых при создании фактора. В этом случае c(10, 20, 30, 40)
. Если мы знаем исходные уровни (в правильном порядке), мы можем вернуться к исходным значениям.
> orig_levels <- c(10, 20, 30, 40)
> x1 <- orig_levels[f]
> all.equal(x, x1)
[1] TRUE
И это будет работать только в том случае, если для всех возможных значений в исходных данных были определены метки.
Так что, если вам понадобятся исходные значения, вы должны сохранить их. В противном случае есть большая вероятность, что вернуться к ним будет невозможно только с фактора.