【问题标题】:Mean function in R (Dealing with factors)R中的平均函数(处理因子)
【发布时间】:2013-12-09 17:41:42
【问题描述】:

所以我有这个向量:

x
 [1] 76 89 78 50 84 56 29 53 32 68
112 Levels: 0 1 10 100 101 102 103 104 105 106 107 108 109 11 110 12 13 ... eta

为什么会这样?

[1] NA
Warning message:
In mean.default(x) : l'argomento non è numerico o logico: restituisco NA

【问题讨论】:

  • 试图翻译错误信息:“参数既不是数字也不是逻辑。替换为 N/A”。
  • 您可以使用this将语言设置为英语

标签: r


【解决方案1】:

看起来x 是一个因素。将因子转换为数字时有一个问题。你需要使用:

mean(as.numeric(as.character(x)), na.rm=TRUE)

如果你不先转换成字符,你会得到底层的因子代码。

【讨论】:

  • 圣洁#### 这确实是一个陷阱!竖起两个大拇指!
【解决方案2】:

除了更改为数值之外,当您使用mean 函数时,请确保指定na.rm=TRUE,以防向量中有NA 值。否则,它会显示您看到的警告。

【讨论】:

    【解决方案3】:

    看起来x 是一个分类变量——试试

    mean(as.numeric(as.character(x)))
    

    (根据 James 指出,如果没有 as.character,您将获得因子代码:

    x <- as.factor(10:20)
    as.numeric(x)
    [1]  1  2  3  4  5  6  7  8  9 10 11
    

    省略na.rm=TRUE,因为它虽然更安全,但不会导致问题)

    【讨论】:

    • 谢谢!我如何知道我处理的是分类变量还是数值变量?
    • 打印x 给了你等级。 R 通常将“数字”的东西解析为数值变量,但我猜想这个向量被切掉了一些以摆脱其中的一些。如果你检查原始向量,我敢打赌你会发现一些不是“数字”的东西。
    • 使用str(your_object)查看东西存储的模式。
    • 确实,我认为数据集上可能隐藏着一些不是“数字”的东西,但我不知道如何找到它。
    • 尚未查看您的数据集,但您可以使用&gt; test &lt;- as.data.frame(c(1:10, "foo")),它将一列作为分类变量加载。即使您删除了最后一行 (test[,1:10]),它仍然是分类的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多