首页 > 解决方案 > 更改 R 中类型因子的变量的值

问题描述

在 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"

但是,该方案因大小为 1 的因素而分崩离析,如下所示:

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

重新分配改变了现在的类型class(LowerCourt) == "character",违背了使用因子类型的目的。我想要的是在指定级别内重置值并保留类型。

我在列表中遇到过这种情况(例如,input),其中的内容是因子(例如input$LowerCourtinput$Petitioner等)。每当我将一个因子的值重置为允许的水平之一时,该值都会发生变化,但类型(字符)也会发生变化。这会破坏其他一些需要正确类型的代码。

对于解决此问题的任何指导,我将不胜感激。

标签: r

解决方案


这与 的长度无关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"

推荐阅读