dataframe列的更改级别更改了dataframe [duplicate]中的值

问题描述 投票:1回答:1

我不明白这个逻辑:

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

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

df

此结果是:

df
   x
1 no

因此更改了我最初创建的一行中x的值。当我为数据帧中的因子列分配级别时,这不只是定义元数据吗?

我如何维护原始值-在分配级别的仅此一列中,值=“是”?还是应该创建一个空的数据框并分配级别,然后分配值?谢谢!

我的特定用例是,我有一些来自某个地方的值(预测值)。因此基本上是一行数据。然后,我要做出一个预测。不过,大多数R模型都需要设置级别。因此,我做了上面的事情,但是它改变了数据?!

PS:

我可以,但是看起来很笨拙:

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

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

df[1,]$x = x_value

PPS:

这可能是最短的代码-谢谢:

df <- data.frame(
    x = factor(x_value, levels = c("no", "yes"))
)
r categorical-data
1个回答
1
投票
x_value <- factor("yes", levels = c("no", "yes"))
df <- data.frame(
    x = x_value
)

df

    x
1 yes

为什么问题中的示例显示此“怪异”行为

创建的数据框具有一个因子。设置为levels()时,该级别的相应编号是1,并且这是与之关联的元素。

这里是一个简单的例子:

如果我们创建这样的数据框

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

df$x

向我们显示级别为

[1] somethingElse more          more         
Levels: more somethingElse

注意,即使首先出现"more",第一级还是"somethingElse"。这是因为排序时,"more"首先出现。因此,如果我们现在分配

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

第一个因子水平为"yes",第二个因子水平为"somethingElse",导致(可能不直观)

              x
1 somethingElse
2           yes
3           yes
© www.soinside.com 2019 - 2024. All rights reserved.