【问题标题】:Inquiry: Why does base R behave this way with factor()? [duplicate]询问:为什么 base R 在使用 factor() 时会有这种行为? [复制]
【发布时间】:2018-10-10 15:34:27
【问题描述】:

问题

我有兴趣将数字二进制信息转换为性别。在此期间,我在 R 中遇到了一些我不理解的行为。

factor(c(0,1,0,1),labels = c("male","female"))

这按预期工作。你会得到以下输出:

[1] male   female male   female
Levels: male female

但是,当我决定明确并输入以下内容时:

factor(c(0,1,0,1),levels = c("male","female"), labels = c("male","female"))

它将数值数据转换为 NA。这让我感到不安,因为我同时指定了级别和标签。在我看来,我编写的代码是等价的,但是基础 R 对代码的解释不同。

[1] <NA> <NA> <NA> <NA>
Levels: male female

我的问题很简单:为什么?

注意事项

我去了 R 文档中的因子函数。我已经用谷歌搜索了这个问题并在 stackoverflow 上进行了搜索,据我所知,这非常简单,要么没有被问到,要么我以找不到重复的方式问它。感谢你的理解。

【问题讨论】:

  • levels = 0:1。您是说您希望级别为"male""female",但您的向量只有零和一,而不是那些值。
  • 来自?factor:“如果在levels [...] 中没有找到x[i] 的匹配项,则结果的i-th 元素设置为NA
  • levels 是出现在您实际提供的向量中的值。标签是重新标记它们的东西。你的向量只包含 0 和 1 不是男性和女性,所以结果是 NAs。
  • 在链接中,检查@Ben Bolker's answer 中的第一个示例 - 与您的情况相同。
  • @hlyates 不,我认为您可以将您的问题留在这里作为 Ben 回答的路标。你的问题很清楚,很高兴你提供了一个小例子!因素棘手的!另请参阅Confusion between factor levels and factor labels(尽管您的具体情况未在此处处理)。干杯

标签: r


【解决方案1】:

您必须为向量中的值分配levels 属性。这些值是零和一,不是 "male""female"

factor(c(0, 1, 0, 1), levels = 0:1, labels = c("male", "female"))
#[1] male   female male   female
#Levels: male female

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多