猫も杓子も構造化

発達障害、特別支援などについて書いています。最近は心理学関係の内容が多めです。

カンマ入り数字のある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])
}

もっとスマートな方法がありそうな気がするが、とりあえずこれでなんとかなるのでよしとする。