Factor型になってしまいがちな文字列型のデータフレームの列を戻す

文字列型の列を持つデータフレームを作成しようとする場合、その列がFactor型として扱われる。
特にCSVファイルをheaderオプション指定しないで読み込むときにこれに出会ってイライラする。

> x <- data.frame(a=c("a","a","b","c"),b=1:4)
> str(x)
'data.frame':	4 obs. of  2 variables:
 $ a: Factor w/ 3 levels "a","b","c": 1 1 2 3
 $ b: int  1 2 3 4

これを文字型に直すにはtransform関数を使用する。

>y <- transform(x,a=levels(a)[a])
  a b
1 a 1
2 a 2
3 b 3
4 c 4
> str(y)
'data.frame':	4 obs. of  2 variables:
 $ a: chr  "a" "a" "b" "c"
 $ b: int  1 2 3 4

と元に戻せる。もっと簡単に

> x$a <- as.character(x$a)
> str(x)
'data.frame':	4 obs. of  2 variables:
 $ a: chr  "a" "a" "b" "c"
 $ b: int  1 2 3 4

と書いても良い。

データフレームをファイルから、read.table,read.csvで読み込む時は、引数の

stringsAsFactors

をFALSEにしとけばファクター型にならず、文字型となる。