- データフレームに変数を追加する関数
データフレームへの変数を追加する関数は,transform()がある.
- 使用する「iris」のデータ構造の確認
(1) 「irisデータ」のデータ構造
.「コンソール」 画面に,
str (iris) # と記述すると,「irisのデータ構造」が表示され,5変数の名前と,型が表示される.
・Sepal.Length: num 数値型 ・Sepal.Width : num 数値型 ・Petal.Length: num 数値型 ・Petal.Width : num 数値型
・Species : Factor カテゴリ型
|
あやめの大きな3枚のはなびらは,「Sepal がく片」で,小さな3枚のはなびらが,「Petal 花びら」である.
Sepal「がく片」の長さと幅・Petal「花びら」の長さと幅
Species「あやめ3品種 [setosa・versicolor・virginica]」
|
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
|
(2) 「irisデータ」のデータリスト
・「コンソール」 画面に,
iris # と記述すると,Rに組み込みこまれているFisherの研究で使われた「iris」データ 150サンプルが表示される.
> iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
・・・・・・・・・・・・・・・・・・・・・
|
|
・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・
140 6.9 3.1 5.4 2.1 virginica
141 6.7 3.1 5.6 2.4 virginica
142 6.9 3.1 5.1 2.3 virginica
143 5.8 2.7 5.1 1.9 virginica
144 6.8 3.2 5.9 2.3 virginica
145 6.7 3.3 5.7 2.5 virginica
146 6.7 3.0 5.2 2.3 virginica
147 6.3 2.5 5.0 1.9 virginica
148 6.5 3.0 5.2 2.0 virginica
149 6.2 3.4 5.4 2.3 virginica
150 5.9 3.0 5.1 1.8 virginica
|
|
サンプル番号1−50が品種setosa,サンプル番号51−100が品種versicolor,サンプル番号101−150が品種virginicaである.
変数番号1がSepal.Length,変数番号2がSepal.Width,変数番号3がPetal.Length,変数番号4がPetal.Width,変数番号5がSpeciesである.
- 新しい変数を作成
Sepal.Length とSepal.Widthの比率を計算しこれを変数名 Sepal.LHとする. 計算式 Sepal.LH = Sepal.Length / Sepal.Width
Petal.Length とPetal.Widthの比率を計算しこれを変数名 Petal.LHとする. 計算式 Petal.LH = Petal.Length / Petal.Width
(1) 一度に2変数を追加する
「コンソール」 画面に,
iris.LH1 <- data.frame ( iris ) # と記述し,irisのデータを持つ,新しいデータフレーム iris.LH1 を定義する.
失敗するとオリジナルのデータフレームがなくなってしまうので注意する.
iris.LH1 <- transform ( iris.LH1, Sepal.LH = Sepal.Length / Sepal.Width, Petal.LH = Petal.Length / Petal.Width )
計算式で作られた変数 Sepal.LHと変数 Petal.LHが追加される.
iris.LH1 # と記述し,データフレーム iris.LH1 の内容を確認する.
str ( iris.LH1 ) # と記述し,iris.LH1 のデータ構造を確認する.変数が五個から七個に変わっている.
> iris.LH1 <- data.frame ( iris )
> iris.LH1 <- transform ( iris.LH1, Sepal.LH = Sepal.Length / Sepal.Width, Petal.LH = Petal.Length / Petal.Width )
> iris.LH1
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.LH Petal.LH
1 5.1 3.5 1.4 0.2 setosa 1.457143 7.000000
2 4.9 3.0 1.4 0.2 setosa 1.633333 7.000000
3 4.7 3.2 1.3 0.2 setosa 1.468750 6.500000
4 4.6 3.1 1.5 0.2 setosa 1.483871 7.500000
5 5.0 3.6 1.4 0.2 setosa 1.388889 7.000000
6 5.4 3.9 1.7 0.4 setosa 1.384615 4.250000
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
147 6.3 2.5 5.0 1.9 virginica 2.520000 2.631579
148 6.5 3.0 5.2 2.0 virginica 2.166667 2.600000
149 6.2 3.4 5.4 2.3 virginica 1.823529 2.347826
150 5.9 3.0 5.1 1.8 virginica 1.966667 2.833333
> str ( iris.LH1 )
'data.frame': 150 obs. of 7 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Sepal.LH : num 1.46 1.63 1.47 1.48 1.39 ...
$ Petal.LH : num 7 7 6.5 7.5 7 ...
|
(2) 変数を一個ずつ追加する場合
「コンソール」 画面に,
iris.LH2 <- data.frame ( iris ) # と記述し,irisのデータを持つ,新しいデータフレーム iris.LH2 を定義する.これで作業を行う.
失敗するとオリジナルのデータフレームがなくなってしまうので注意する.
iris.LH2 <- transform ( iris.LH2, Sepal.LH = Sepal.Length / Sepal.Width ) # 計算式で作られた変数 Sepal.LHが追加される.
次に,変数を追加する.
iris.LH2 <- transform ( iris.LH2, Petal.LH = Petal.Length / Petal.Width ) # 計算式で作られた変数 Petal.LHが追加される.
iris.LH2 # と記述し,データフレーム iris.LH2 の内容を確認する.
str ( iris.LH2 ) # と記述し,iris.LH2 のデータ構造を確認する.変数が2個増えている.
> iris.LH2 <- data.frame ( iris )
> iris.LH2 <- transform ( iris.LH2, Sepal.LH = Sepal.Length / Sepal.Width )
> iris.LH2 <- transform ( iris.LH2, Petal.LH = Petal.Length / Petal.Width )
> iris.LH2
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.LH Petal.LH
1 5.1 3.5 1.4 0.2 setosa 1.457143 7.000000
2 4.9 3.0 1.4 0.2 setosa 1.633333 7.000000
3 4.7 3.2 1.3 0.2 setosa 1.468750 6.500000
4 4.6 3.1 1.5 0.2 setosa 1.483871 7.500000
5 5.0 3.6 1.4 0.2 setosa 1.388889 7.000000
6 5.4 3.9 1.7 0.4 setosa 1.384615 4.250000
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
147 6.3 2.5 5.0 1.9 virginica 2.520000 2.631579
148 6.5 3.0 5.2 2.0 virginica 2.166667 2.600000
149 6.2 3.4 5.4 2.3 virginica 1.823529 2.347826
150 5.9 3.0 5.1 1.8 virginica 1.966667 2.833333
> str ( iris.LH2 )
'data.frame': 150 obs. of 7 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Sepal.LH : num 1.46 1.63 1.47 1.48 1.39 ...
$ Petal.LH : num 7 7 6.5 7.5 7 ...
|
- 変数の並び順序を変える
「コンソール」 画面に,
iris.LH3 <- iris.LH2 [ c(1, 2, 6, 3, 4, 7, 5) ]
# と新しい順序の変数番号を記述する.
iris.LH3 # と記述し,データフレーム iris.LH3 の内容を確認する.
str ( iris.LH3 ) # と記述し,iris.LH3 のデータ構造を確認する.
> iris.LH3 <- iris.LH2 [ c(1, 2, 6, 3, 4, 7, 5) ]
> iris.LH3
Sepal.Length Sepal.Width Sepal.LH Petal.Length Petal.Width Petal.LH Species
1 5.1 3.5 1.457143 1.4 0.2 7.000000 setosa
2 4.9 3.0 1.633333 1.4 0.2 7.000000 setosa
3 4.7 3.2 1.468750 1.3 0.2 6.500000 setosa
4 4.6 3.1 1.483871 1.5 0.2 7.500000 setosa
5 5.0 3.6 1.388889 1.4 0.2 7.000000 setosa
6 5.4 3.9 1.384615 1.7 0.4 4.250000 setosa
7 4.6 3.4 1.352941 1.4 0.3 4.666667 setosa
8 5.0 3.4 1.470588 1.5 0.2 7.500000 setosa
9 4.4 2.9 1.517241 1.4 0.2 7.000000 setosa
10 4.9 3.1 1.580645 1.5 0.1 15.000000 setosa
・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・
147 6.3 2.5 2.520000 5.0 1.9 2.631579 virginica
148 6.5 3.0 2.166667 5.2 2.0 2.600000 virginica
149 6.2 3.4 1.823529 5.4 2.3 2.347826 virginica
150 5.9 3.0 1.966667 5.1 1.8 2.833333 virginica
> str ( iris.LH3 )
'data.frame': 150 obs. of 7 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Sepal.LH : num 1.46 1.63 1.47 1.48 1.39 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Petal.LH : num 7 7 6.5 7.5 7 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
|
- 散布図を描く
「コンソール」 画面に,
plot ( iris.LH2 [6:7], main = "[iris.LH2 Data] setosa[red] versicolor[green] virginica[blue]", pch = 21, bg = c("red", "green3", "blue")[unclass( iris.LH2$Species ) ] )
# と記述しSepal.LH とPetal.LHの散布図を描く. setosa赤 versicolor緑 virginica青

|