Изменение значения переменной, имеющей тип-фактор в R - PullRequest
0 голосов
/ 11 октября 2019

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

LowerCourt = factor(x=c("conser", "liberal"), levels=c("conser", "liberal"))
> LowerCourt
[1] conser  liberal
Levels: conser liberal

Таким образом, допустимо следующее:

LowerCourt[1] <- "liberal"
> LowerCourt
[1] liberal liberal
Levels: conser liberal

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

LowerCourt[1] <- "libera"

Однако эта схема разваливается с коэффициентом, равным единице, например так:

LowerCourt = factor(x="conser", levels=c("conser", "liberal"))
LowerCourt <- "liberal"

Переназначение меняет тип так, что теперь class(LowerCourt) == "character", что побеждает цель использования типа фактора. Я хочу, чтобы сбросить значение в указанных уровнях и сохранить тип.

Я столкнулся с этой ситуацией со списком (скажем, input), содержание которого является факторами (например, input$LowerCourt,input$Petitioner и т. Д.). Каждый раз, когда я сбрасываю значение фактора на один из допустимых уровней, значение меняется, но меняется и тип (на символ). Это нарушает какой-то другой код, который ожидает правильные типы.

Буду признателен за любые рекомендации, чтобы обойти эту проблему.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Речь идет не о длине factor, вы фактически переопределяете предыдущее значение, присваивая новое значение переменной LowerCourt.

Если вы измените только первое значение, как в первом примере, LowerCourt все равно останется как factor

LowerCourt[1] <- "liberal"
LowerCourt
#[1] liberal
#Levels: conser liberal

Более того, даже если факторная переменная имеет длину больше чемодин, но если вы переопределите значение, оно становится символом.

LowerCourt = factor(x=c("conser", "liberal"), levels=c("conser", "liberal"))
LowerCourt <- "liberal"
LowerCourt
#[1] "liberal"
0 голосов
/ 11 октября 2019

Вы переназначаете переменную как «либеральная», которая является символом, а не фактором. Итак, ваш класс меняется.

Либо переопределите переменную с помощью factor(x=c("liberal"),levels=c("conser","liberal"))

ИЛИ, если вы хотите, чтобы весь вектор был заменен значением, используйте:

LowerCourt1 = factor(x=rep("liberal",length(LowerCourt)),levels=c("conser","liberal"))

Пустья знаю, если это работает.

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