更改dataframe列的级别会更改dataframe中的值

更改dataframe列的级别会更改dataframe中的值,r,categorical-data,R,Categorical Data,我不明白这种逻辑: x_value <- "yes" df <- data.frame( x = x_value ) levels(df$x) <- c("no", "yes") df 所以在我最初创建的一行中更改了x的值。当我为数据框中的一个因子列指定级别时,这不是简单地定义元数据吗 如何在分配级别时保持原始值?仅在这一列中使用value=“yes”?或者我应该创建空数据帧并分配级别和值吗?谢谢 我的具体用例是,我

我不明白这种逻辑:

x_value <- "yes"
df <- data.frame(
                x = x_value
            )

levels(df$x) <- c("no", "yes")

df
所以在我最初创建的一行中更改了x的值。当我为数据框中的一个因子列指定级别时,这不是简单地定义元数据吗

如何在分配级别时保持原始值?仅在这一列中使用value=“yes”?或者我应该创建空数据帧并分配级别和值吗?谢谢

我的具体用例是,我从某处得到了一些值(预测值)。所以基本上是一行数据。然后我想做一个预测。不过,大多数R模型都要求设置级别。因此,我做了上述操作,但它改变了数据

附言:

我能做到,但这似乎很笨拙:

x_value <- "yes"
df <- data.frame(
                x = x_value
            )

levels(df$x) <- c("no", "yes")

df[1,]$x = x_value
x_值
向我们展示了这些级别是

[1] somethingElse more          more         
Levels: more somethingElse
请注意,第一个级别是
“more”
,即使
“somethingElse”
首先出现。这是因为当排序时,“更多”排在第一位。 那么,如果我们现在分配

levels(df$x) <- c("yes", "somethingElse", "more")

尝试
df$x让我们知道链接帖子是否有用。“实际值”是整数,它们没有改变,是1。选中
as.numeric(df$x)
@zx8754:链接的帖子在这里没有解决这个问题。这不仅仅是给一个因素增加一个水平。这个问题不应该被关闭,因为它“已经有了答案”。另一篇文章是关于其他内容的。@zx8754:问题是“为什么
levels()
更改值?”这是一个有效的问题。
x_value <- factor("yes", levels = c("no", "yes"))
df <- data.frame(
    x = x_value
)

df

    x
1 yes
x_value <- c("somethingElse", "more", "more")
df <- data.frame(
    x = x_value
)

df$x
[1] somethingElse more          more         
Levels: more somethingElse
levels(df$x) <- c("yes", "somethingElse", "more")
              x
1 somethingElse
2           yes
3           yes