テストファイルをインポートし、ヒストグラムを作成しようとしました
pichman <- read.csv(file="picman.txt", header=TRUE, sep="/t")
hist <- as.numeric(pichman$WS)
ただし、データセットの値から異なる数値を取得します。もともと私はテキストがあるからだと思ったので、テキストを削除しました:
table(pichman$WS)
ws <- pichman$WS[pichman$WS!="Down" & pichman$WS!="NoData"]
しかし、私はまだ非常に高い数字を取得していますが、誰かが考えていますか?
要因に問題があると思われます。例えば、
> x = factor(4:8)
> x
[1] 4 5 6 7 8
Levels: 4 5 6 7 8
> as.numeric(x)
[1] 1 2 3 4 5
> as.numeric(as.character(x))
[1] 4 5 6 7 8
コメント:
as.numeric
に期待/期待されますか?read.csv
で、引数stringsAsFactors=FALSE
を使用してみてくださいsep="/t
ではなくsep="\t"
であると確信していますかhead(pitchman)
を使用して、データの最初の数行を確認しますpichman <- read.csv(file="picman.txt", header=TRUE, sep="/t")
を実行できません。Csgillespieが言ったように。 stringsAsFactorsはTRUEのデフォルトで、テキストをファクターに変換します。そのため、テキストを削除した後でも、データフレームに要因が残っています。
変換に関しては、より最適な方法があります。参照としてここに置きます:
> x <- factor(sample(4:8,10,replace=T))
> x
[1] 6 4 8 6 7 6 8 5 8 4
Levels: 4 5 6 7 8
> as.numeric(levels(x))[x]
[1] 6 4 8 6 7 6 8 5 8 4
動作することを示すため。
タイミング:
> x <- factor(sample(4:8,500000,replace=T))
> system.time(as.numeric(as.character(x)))
user system elapsed
0.11 0.00 0.11
> system.time(as.numeric(levels(x))[x])
user system elapsed
0 0 0
これは大きな改善ですが、必ずしもボトルネックではありません。ただし、大きなデータフレームと変換する列が多い場合は重要になります。