我不明白这个逻辑:
x_value <- "yes"
df <- data.frame(
x = x_value
)
levels(df$x) <- c("no", "yes")
df
结果是:
df
x
1 no
因此更改了我最初创建的一行中x的值。当我为数据帧中的因子列分配级别时,这不是简单地定义元数据吗?
如何在分配级别的同时仅在值=“ yes”的这一列中保持原始值?还是应该创建一个空的数据框并分配级别,然后分配值?谢谢!
我的特定用例是,我有一些来自某个地方的值(预测值)。所以基本上是一行数据。然后,我要做出一个预测。不过,大多数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"))
)
答案 0 :(得分:2)
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