LoginSignup
35
39

More than 5 years have passed since last update.

R:read.csv / read.tableで型と列名を指定して読み込む。

Posted at

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で列名を指定できます。

35
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
39