データフレーム全体の参照
データフレームの名前そのもので、データフレームの内容を参照できる。列名(name, age)や項目名(“1″~”3”)も含めて参照される。
1 2 3 4 5 6 7 8 9 10 |
> name.data <- c("John", "Alice", "Dick") > age.data <- c(35, 28, 42) > data <- data.frame(name=name.data, age=age.data) > data$name <- as.character(data$name) > > data name age 1 John 35 2 Alice 28 3 Dick 42 |
データフレームの行数・列数の参照
nrow()
関数、ncol()
関数でデータフレームの行数、列数を参照できる。dim()
関数は(行数, 列数)のベクトルを返す。
1 2 3 4 5 6 |
> nrow(data) [1] 3 > ncol(data) [1] 2 > dim(data) [1] 3 2 |
データフレームの内容の参照・変更
列名・項目名の参照・変更
列名はnames()
関数かcolnames()
関数で、項目名はrownames()
関数で取得できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
> name.data <- c("John", "Alice", "Dick") > age.data <- c(35, 28, 42) > data <- data.frame(name=name.data, age=age.data) > data$name <- as.character(data$name) > > data name age 1 John 35 2 Alice 28 3 Dick 42 > > names(data) [1] "name" "age" > > colnames(data) [1] "name" "age" > > rownames(data) [1] "1" "2" "3" |
列名や項目名は、それぞれの参照関数にベクトルを代入することで変更できる。
1 2 3 4 5 6 7 |
> names(data) <- c("NAME", "AGE") > rownames(data) <- c("a", "b", "c") > data NAME AGE a John 35 b Alice 28 c Dick 42 |
データフレームの要素の参照・変更
行・列を直接指定して参照する場合、列の場合は列名を指定するか列番号で、行の場合は行番号を指定して参照する。行・列の番号を指定して1つのデータを取得することもできる。
行番号を指定する場合は後ろに、列番号を指定する場合は前に”,”をつける必要があり、これは後述の行の抽出の場合に重要になる。
なお、参照した要素の右に代入文を書くことで、その要素や業・列の内容を変更できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
> name.data <- c("John", "Alice", "Dick") > age.data <- c(35, 28, 42) > data <- data.frame(name=name.data, age=age.data) > data$name <- as.character(data$name) > > data name age 1 John 35 2 Alice 28 3 Dick 42 > > data$age [1] 35 28 42 > > data[,2] [1] 35 28 42 > > data[1,] name age 1 John 35 > > data[3,2] [1] 42 |
行・列の追加と削除
行・列の追加
行の追加はrbind()
関数で、列の追加はcbind()
関数で行う。
これらの関数は元のデータフレームを変更せず、新たなデータフレームを結果として返す。
rbindの注意点として、文字型を意図した項目はあらかじめFactor型から文字型に変更しておかないと、文字列を含んだデータを結合しようとするとエラーになる。
cbindの注意点としては、デフォルトでは引数の変数名が項目名にあてられる。直接c(…)と書いたりすると、それがそのまま項目名になってしまう。
【追記】 以下の例ではrbindの引数にベクトルを渡しているが、文字列と数値が混在している下記のような例では、これは危ない→rbindについてを参照
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
> name.data <- c("John", "Alice", "Dick") > age.data <- c(35, 28, 42) > data <- data.frame(name=name.data, age=age.data) > data$name <- as.character(data$name) > > data name age 1 John 35 2 Alice 28 3 Dick 42 > > rbind(data, c("Elen", 32)) name age 1 John 35 2 Alice 28 3 Dick 42 4 Elen 32 > > height <- c(180, 162, 172) > cbind(data, height) name age height 1 John 35 180 2 Alice 28 162 3 Dick 42 172 |
行・列の削除
行や列の番号を指定して削除する場合は、番号にマイナスをつける。範囲指定も可能。
行・列の追加と同じく、これらの操作も元のデータフレームを変更せず、新たなデータフレームを結果として返す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
> name.data <- c("John", "Alice", "Dick") > age.data <- c(35, 28, 42) > height.data <- c(180, 162, 172) > data <- data.frame(name=name.data, age=age.data, height=height.data) > > data name age height 1 John 35 180 2 Alice 28 162 3 Dick 42 172 > > data[-2,] name age height 1 John 35 180 3 Dick 42 172 > > data[,-2] name height 1 John 180 2 Alice 162 3 Dick 172 > > data[-1:-2,] name age height 3 Dick 42 172 |
データの抽出
列項目の条件を指定して、要素を抽出することができる。
指定の条件の後に”,”をつけるのを忘れないこと。これは行要素に対して条件指定していることを表している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
> 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$name <- as.character(data$name) > > 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 > > data[data$name=="Luice",] name gender height weight qualified 4 Luice M 178 82 FALSE > > data[data$gender=="F",] name gender height weight qualified 2 Gene F 160 56 FALSE 5 Elen F 157 58 TRUE > > data[data$height>160,] name gender height weight qualified 1 John M 165 62 TRUE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE > > data[weight>=60 & qualified==T,] name gender height weight qualified 1 John M 165 62 TRUE 3 Jack M 170 75 TRUE |
抽出操作はもとのデータフレームに影響を与えず、結果は新たなデータフレームとして返される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
> subdata <- data[data$gender=="F",] > > 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 > > subdata name gender height weight qualified 2 Gene F 160 56 FALSE 5 Elen F 157 58 TRUE |