Last updated: October 2009. Kajiyama                    [ 目次に戻る ]

「iris」に新しい変数を追加する


  1. データフレームに変数を追加する関数

    データフレームへの変数を追加する関数は,transform()がある.


  2. 使用する「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である.


  3. 新しい変数を作成

    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 ...



  4.  変数の並び順序を変える

    「コンソール」 画面に,

    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 ...
    



  5.  散布図を描く

    「コンソール」 画面に,

    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青


[ 目次に戻る ]