【问题标题】:R cannot use hist() because "content not numeric" due to negative decimal numbers?R 不能使用 hist() 因为负十进制数导致“内容不是数字”?
【发布时间】:2013-03-03 12:06:25
【问题描述】:

我是 R 新手,我正在尝试使用 hist() 绘制一个直方图,其中包含 100,000 个这样的数字列表

-0.764
-0.662
-0.764
-0.019
0.464
0.668
0.464

但我不能这样做,因为 R 抱怨内容不是数字。这是我尝试过的:

  • 我使用 t <- read.table(file= "file.txt", sep = "\n", dec = ".", header = TRUE) 读取文件,数据加载并且看起来很好(我得到相同的值)

  • 我尝试使用 as.numeric(c(t[,1])), sapply(t, as.numeric) 将其设为数字​​,但得到的数字完全不同,例如

    53 428 791 428 582 428 979 428 456 533 550

我认为他们可能是小数点“。”的问题。或负号“-”或两者兼而有之。 有什么想法吗?

非常感谢!

【问题讨论】:

  • 不看数据就很难回答。什么给了class(t[,1])
  • 它给出:[1]“因素”感谢您的帮助!
  • 我就是这么想的。您必须了解为什么 R 将其视为一个因素。此列中应该有一些东西(字母、符号或其他)...

标签: r decimal histogram numeric


【解决方案1】:

如果要将因子转换为数值类型,则必须了解因子的工作原理。

在内部,factor 类的列中的每个不同项目(每个“因素”)都存储为一个数字。这些是您在运行as.numeric 时看到的数字。这些数字实际上只是因子水平的索引,因此如果您输入 levels(t[,1]),您应该会在数据框的第一列中看到所有不同值的列表。

因此,有了这些知识,我们可以使用一个技巧来提取实际数字:

as.numeric(levels(t[,1])[t[,1]])

当然,如果 R 在 read.table 读取这行数字时将其解释为一个因素,那么在此技巧起作用之前,您必须删除包含非数字类型的行。

【讨论】:

    【解决方案2】:

    R 似乎已将数据的第一列转换为一个因素。如果此列中的所有数据在文件中都是数字,则不应发生这种情况。所以肯定有一个元素不能被识别为数字。

    您可以在 R 中尝试以下(有点脏)来尝试找出问题所在。从以下因素开始:

    R> v <- factor(c("0.51", "-0.12", "0.345", "0.45b", "-0.8"))
    

    您可以确定哪个值导致问题:

    R> v[is.na(as.numeric(as.character(v)))]
    [1] 0.45b
    

    你可以找到这个值在你的向量中的位置:

    R> which(is.na(as.numeric(as.character(v))))
    [1] 4
    

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2021-06-14
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多