R присвоить уровни факторной переменной

Мне дали таблицу Excel, подобную этой:

datos <- data.frame(op= 1:4, var1= c(4, 2, 3, 2))

Теперь есть другие таблицы с ключами для op и var1, которые являются категориальными переменными. Предположим, что после загрузки они становятся:

set.seed(1)
op <- paste("op",c(1:4),sep="")
var1 <- sample(LETTERS, 19, replace= FALSE)

Как видите, во фрейме данных есть неиспользуемые уровни. Я хочу заменить числа на соответствующие уровни. Вот что я пробовал:

datos[] <- lapply(datos, factor)
levels(datos$op) <- op
levels(datos$var1) <- var1

Это не удается, потому что это переупорядочивает факторы в алфавитном порядке и дает неверный результат. Затем я попробовал:

datos$var1 <- factor(datos$var1, levels= var1, ordered= TRUE)

но это помещает все в datos$var1 как NA (я думаю, это из-за несоответствия длины.

Как правильно это сделать?


person PavoDive    schedule 14.02.2016    source источник
comment
Я не уверен насчет ожидаемого результата, но, возможно, вы хотите datos$var1 <- factor(var1[datos$var1], levels = unique(var1))?   -  person talat    schedule 15.02.2016
comment
Это сработало, спасибо!   -  person PavoDive    schedule 15.02.2016
comment
Отлично, может, ты сам ответишь написать?   -  person talat    schedule 15.02.2016


Ответы (1)


Следуя любезному совету @docendoDiscimus, я публикую этот ответ для справок в будущем:

По данным, указанным в вопросе:

datos$var1 <- factor(var1[datos$var1], levels= unique(var1))
datos
## op

Обратите внимание, что это решение следует применять без преобразования datos$var1 в коэффициент (то есть без применения кода datos[] <- lapply(datos, factor).

person PavoDive    schedule 14.02.2016