2

私はRを初めて使用し、このような100,000個の数値のリストのhist()を使用してヒストグラムを描画しようとしています。

-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 に答える