カンマ入り数字のあるcsvの読み込み
csvからデータを読み込むときにカンマが入った数字(29,000)みたいなものが因子型(factor)のベクトルとして読み込まれることがある。
そういうときには、read.csvのオプションにstringsAsFactors=FALSEというオプションをつけると良い。こうするととりあえず文字列(character)のベクトルとして読み込まれる。
dat <- read.csv("ファイル名.csv",header=TRUE,fileEncoding="CP932", stringsAsFactors=FALSE)
で、文字列からカンマを取り除かないと数値型に変換できないわけなので、sub関数によって「,」を「」に置き換えた後に数値変換をすると数字型のベクトルを得る。
dat$列名 <- sub(",","",dat$列名) dat$列名 <- as.numeric(dat[,列名])
データフレーム全体にこれを適用したいのだけれど、sub関数はデータフレームに適用してもうまくいかないので、しかたなしにsub関数を繰り返し処理でやることにする。ループ変数のベクトルを繰り返しの列番号の集合にすれば、処理したい列を選ぶこともできる。
# 全ての列に適用 for(i in 1:9){ dat[,i] <- sub(",","",dat[,i]) dat[,i] <- as.numeric(dat[,i]) } # 2,4,6列目を数値にする for(i in c(2,4,6)){ dat[,i] <- sub(",","",dat[,i]) dat[,i] <- as.numeric(dat[,i]) }
もっとスマートな方法がありそうな気がするが、とりあえずこれでなんとかなるのでよしとする。