ベクトルから生成する場合
データフレームを複数のベクトルから生成する場合、文字列のベクトルがFactor型(因子型)になってしまう。
1 2 3 4 5 6 7 |
> name <- c("John", "Alice", "Dick") > age <- c(35, 28, 42) > data <- data.frame(name=name, age=age) > str(data) 'data.frame': 3 obs. of 2 variables: $ name: Factor w/ 3 levels "Alice","Dick",..: 3 1 2 $ age : num 35 28 42 |
これを文字型に直すのに、以下の3つの方法がある。
as.charactor()関数
as.charactor()
関数で指定した列がcharacter化されるので、それを元の列に代入。
1 2 3 |
> data$name <- as.character(data$name) > str(data$name) chr [1:3] "John" "Alice" "Dick" |
levels()関数
仕組みはよくわかっていない。
1 2 3 |
> data$name <- levels(data$name)[data$name] > str(data$name) chr [1:3] "John" "Alice" "Dick" |
transform()関数
データフレーム全体に適用。
1 2 3 |
> data <- transform(data, name=levels(name)[name]) > str(data$name) chr [1:3] "John" "Alice" "Dick" |
ファイルから読み込む場合
ファイルから読み込んだ後に上記の操作を行ってもよいが、読み込み時にFactor型への変換を抑止するため、引数にstringsAsFactors = F
を指定する方法もある。
個の引数指定は、read.table、read.delim
、read.csv
の何れでも指定できる。
1 2 3 |
> data <- read.csv("data/demo-dataframe1.csv", stringsAsFactors=F) > str(data$name) chr [1:5] "John" "Gene" "Jack" "Luice" "Elen" |