ベクトル列から生成する方法
同じ長さのベクトルを各列として、データフレームを生成可能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
name.data <- c("John", "Gene", "Jack", "Luice", "Elen") gender.data <- c("M", "F", "M", "M", "F") height.data <- c(165, 160, 170, 178, 157) weight.data <- c(62, 56, 75, 82, 58) qualified.data <- c(T, F, T, F, T) data <- data.frame( name=name.data, gender=gender.data, height=height.data, weight=weight.data, qualified=qualified.data ) data |
上記の結果は以下の通り。
1 2 3 4 5 6 7 |
> data name gender height weight qualified 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
ファイルからの読み込み
通常、作業ディレクトリかその下にあるディレクトリにあるファイルを扱う。扱いやすいのはタブ区切りテキスト、CSV。
read.tableによる方法
TAB区切り/ヘッダなし
1 2 3 4 5 |
John M 165 62 T Gene F 160 56 F Jack M 170 75 T Luice M 178 82 F Elen F 157 58 T |
read.tableでそのまま読み込む。項目名はRが勝手につけてくれる。
デフォルトでTABが区切り文字になってるが、明示する場合は引数にsep="\t"
を追加。
1 2 3 4 5 6 7 8 |
> data <- read.table("data/demo-dataframe0.txt") > data V1 V2 V3 V4 V5 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
CSV/ヘッダなし
1 2 3 4 5 |
John,M,165,62,T Gene,F,160,56,F Jack,M,170,75,T Luice,M,178,82,F Elen,F,157,58,T |
read.table
で引数にsep=","
を付けて読み込む。
1 2 3 4 5 6 7 8 |
> data <- read.table("data/demo-dataframe0.csv", sep=",") > data V1 V2 V3 V4 V5 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
TAB区切り/ヘッダあり
1 2 3 4 5 6 |
name gender height weight qualified John M 165 62 T Gene F 160 56 F Jack M 170 75 T Luice M 178 82 F Elen F 157 58 T |
read.table
でheader=T
を付けて読み込む。sep="\t"
を指定してもよい。
1 2 3 4 5 6 7 8 |
> data <- read.table("data/demo-dataframe1.txt", header=T) > data name gender height weight qualified 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
この形式の場合、wrapperクラスのread.delim
でファイルのみ指定して読み込める。
1 2 3 4 5 6 7 8 |
> data <- read.delim("data/demo-dataframe1.txt") > data name gender height weight qualified 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
CSV/ヘッダあり
1 2 3 4 5 6 |
name,gender,height,weight,qualified John,M,165,62,T Gene,F,160,56,F Jack,M,170,75,T Luice,M,178,82,F Elen,F,157,58,T |
read.table
でsep=","
とheader=T
を指定して読み込む。
1 2 3 4 5 6 7 8 |
> data <- read.table("data/demo-dataframe1.csv", sep=",", header=T) > data name gender height weight qualified 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
この形式の場合、wrapperクラスのread.csv
でファイルのみ指定して読み込める。
1 2 3 4 5 6 7 8 |
> data <- read.csv("data/demo-dataframe1.csv") > data name gender height weight qualified 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE |
注意点:Factor型への自動変換
ベクトルからの生成にしても、ファイルからの読み込みにしても、文字列のデータを持ったベクトルをデータフレームに取り込むと、自動的にFactor型(因子型)にされてしまう。
1 2 3 |
> data <- read.csv("data/demo-dataframe1.csv") > str(data$name) Factor w/ 5 levels "Elen","Gene",..: 4 2 3 5 1 |
これを解決するための方法は列の非因子化を参照。