2

我是 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

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

非常感谢!

4

2 回答 2

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
于 2013-03-14T22:27:04.543 回答
1

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

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

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

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

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

于 2013-03-14T22:26:44.933 回答