read.csvとかread.tableはオプションなしで使うとデータ型を勝手に判別してくれますが、それだと都合が悪い場合があります。業務系のコードで数値解釈可能な0始まりな文字列とかね。
そんな時は明示的に型を指定して読み込むオプションがあります。通常の読み込みよりも速度があがる場合もあります。特にfactorになってしまうようなもの。これは別のオプションでも回避可能ですけど。
test.csvがこんなだとします。
"文字1-1", "001",1,2,3,"文字1-2"
"文字2-1", "101",3,2,1,"文字2-2"
まずは単純に読み込んだ場合。
> # 単純に読み込んだ場合。
> data <- read.csv('test.csv', header=F, encoding="UTF-8")
> sapply(data, class)
V1 V2 V3 V4 V5 V6
"factor" "integer" "integer" "integer" "integer" "factor"
2列目が文字列解釈、1、6列目がfactor型として解釈されます。
header=Fは1行目をヘッダーと見なすかどうか、encodingはファイルのエンコーディング指定です。
ヘッダーがないので、名前が勝手に付与されます。
文字列がfactorに解釈されないようにするオプションを付けた場合。
> # 文字列をfactorにしないオプション付き。
> data <- read.csv('test.csv', header=F, encoding="UTF-8", stringsAsFactors=F)
> sapply(data, class)
V1 V2 V3 V4 V5 V6
"character" "integer" "integer" "integer" "integer" "character"
stringsAsFactorsオプションを使います。
型を明示して読み込んだ場合。ついでに列名も指定してみます。
> data <- read.csv('test.csv', colClasses=c("character", "character", rep("numeric",3), "character"), header=F, col.names=c("c1", "c2", "c3", "c4", "c5", "c6"), encoding="UTF-8")
> sapply(data, class)
c1 c2 c3 c4 c5 c6
"character" "character" "numeric" "numeric" "numeric" "character"
colClassesで型を指定します。同じ型が連続する場合は、rep("numeric",3)のように指定することも。
colClasses="character"で、全ての項目を文字列として読み込むようなことも可能です。
colClassesで指定した数よりデータの列数が多い場合、指定されていない分は勝手に解釈されます。
また、col.namesで列名を指定できます。