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

データフレームの行と列の入れ替え (転置行列)


  1. 簡単な,行列の行と列の入れ替え

    (1) 行列の行と列を入れ替える関数は,t ( )である.
    表1

    1 1 1
    2 2 2
    3 3 3
    4 4 4
    5 5 5
    表2

    1 2 3 4 5
    1 2 3 4 5
    1 2 3 4 5

    
    > A <- matrix( c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5), nrow=5, ncol=3 ) # 行列Aを作る
    > A
         [,1] [,2] [,3]
    [1,]    1    1    1
    [2,]    2    2    2
    [3,]    3    3    3
    [4,]    4    4    4
    [5,]    5    5    5
    
    > A1 <- t ( A ) #  転置行列A1を作る
    > A1 
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    2    3    4    5
    [2,]    1    2    3    4    5
    [3,]    1    2    3    4    5
    


    (2) 行列をデータフレームに変換し,行の変数名と列の変数名をつける

    
    > A2 <- data.frame( A1 ) #  マトリック形式 A1 をデータフレーム A2 にする
    > colnames( A2 ) <- c( "変数か", "変数き", "変数く", "変数け", "変数こ")
    > rownames( A2 ) <- c( "変数A", "変数B", "変数C")
    
    > A2
           変数か 変数き 変数く 変数け 変数こ
    変数A      1      2      3      4      5
    変数B      1      2      3      4      5
    変数C      1      2      3      4      5
    
    > str(A2)
    'data.frame':   3 obs. of  5 variables:
     $ 変数か: num  1 1 1
     $ 変数き: num  2 2 2
     $ 変数く: num  3 3 3
     $ 変数け: num  4 4 4
     $ 変数こ: num  5 5 5
    



  2. 大変だ,データフレームの行と列を入れ替え

    全てをRでやろうとはしないこと.

    ・行列とデータフレームは異なるもの.


    表3

      変数A 変数B 変数C
    変数か 1 1 1
    変数き 2 2 2
    変数く 3 3 3
    変数け 4 4 4
    変数こ 5 5 5
    表4

      変数か 変数き 変数く 変数け 変数こ
    変数A 1 2 3 4 5
    変数B 1 2 3 4 5
    変数C 1 2 3 4 5


    (1) 表3の読み込み

    Rの「コンソール」画面に,

    x1 <- read.table ("clipboard", header=TRUE ) #  header=TRUE は第1行が列の変数名

    # と記述し,次に,「表1サンプルA〜D」のカラー部分をマウスで選択し,これをコピーする.

    # そして,エンターキーを押す.コピーした[clipboard]データファイルを,Rの内部のデータフレーム,ファイル名 x1 に直接読み込む.

    x1 #  で作成したデータフレーム x1の内容を確認する.


    (2) 関数 t()で表1を表2に変換できない.

    x2 <- t ( x1 ) #  転置行列

    x2 #  で作成したデータフレーム x2の内容を確認する.

    str( x2 ) #  でデータ構造を確認する.データフレームの型でなくリストの型になっている.


    
    > x1 <- read.table ("clipboard", header=TRUE )
    > x1
          X. 変数A 変数B 変数C
    1 変数か      1      1      1
    2 変数き      2      2      2
    3 変数く      3      3      3
    4 変数け      4      4      4
    5 変数こ      5      5      5
    
    > str( x1 )
    > str(x1)
    'data.frame':   5 obs. of  4 variables:
     $ X.    : Factor w/ 5 levels "変数か","変数き",..: 1 2 3 4 5
     $ 変数A: int  1 2 3 4 5
     $ 変数B: int  1 2 3 4 5
     $ 変数C: int  1 2 3 4 5
    
    > x2 <- t ( x1 ) # 転置行列を作る
    > x2 
           [,1]     [,2]     [,3]     [,4]     [,5]    
    X.     "変数か" "変数き" "変数く" "変数け" "変数こ"
    変数A "1"      "2"      "3"      "4"      "5"     
    変数B "1"      "2"      "3"      "4"      "5"     
    変数C "1"      "2"      "3"      "4"      "5" 
    
    > str( x2 )
     chr [1:4, 1:5] "変数か" "1" "1" "1" "変数き" "2" "2" "2" "変数く" ...
     - attr(*, "dimnames")=List of 2
      ..$ : chr [1:4] "X." "変数A" "変数B" "変数C"
      ..$ : NULL
    


    (3) データの形式を「リスト」から「データフレーム」にする

    Rの「コンソール」画面に,

    x3 <- data.frame( x2 ) #  と記述しリスト形式のデータ x2 をデータフレームの型に変換する.

    # そして,エンターキーを押す.コピーした[clipboard]データファイルを,Rの内部のデータフレーム,ファイル名 x1 に直接読み込む.

    x3 #  と記述しデータフレーム x3の内容を確認する.

    str(x3) #  と記述しデータフレーム x3のデータ構造を確認する.


    
    > x3 <- data.frame( x2 ) # リストをデータフレームに変換
    > x3
               X1     X2     X3     X4     X5
    X.     変数か 変数き 変数く 変数け 変数こ
    変数A      1      2      3      4      5
    変数B      1      2      3      4      5
    変数C      1      2      3      4      5
    
    > str(x3)
    'data.frame':   4 obs. of  5 variables:
     $ X1: Factor w/ 2 levels "1","変数か": 2 1 1 1
      ..- attr(*, "names")= chr  "X." "変数A" "変数B" "変数C"
     $ X2: Factor w/ 2 levels "2","変数き": 2 1 1 1
      ..- attr(*, "names")= chr  "X." "変数A" "変数B" "変数C"
     $ X3: Factor w/ 2 levels "3","変数く": 2 1 1 1
      ..- attr(*, "names")= chr  "X." "変数A" "変数B" "変数C"
     $ X4: Factor w/ 2 levels "4","変数け": 2 1 1 1
      ..- attr(*, "names")= chr  "X." "変数A" "変数B" "変数C"
     $ X5: Factor w/ 2 levels "5","変数こ": 2 1 1 1
      ..- attr(*, "names")= chr  "X." "変数A" "変数B" "変数C"
    


    (4) 余分な行の削除

    Rの「コンソール」画面に,

    x4 <- x3 [ c(2, 3, 4), ] #  と記述し

    # 1行目のサンプル番号1 [X. 変数か 変数き 変数く 変数け 変数こ]を除いたサンプルで,データフレーム x4を作る.

    x4 #  と記述し内容を確認する.


    (5) 列の名前と行の名前の修復

    Rの「コンソール」画面に,

    colnames( x4 ) <- c( "変数か", "変数き", "変数く", "変数け", "変数こ" ) #  と記述し,列の変数名を新たに文字列でつける.

    # 行のサンプル名を新たにつける場合は rownames( x4 ) <- c( "変数A", "変数B", "変数C") と記述する.

    x4 #  と記述し内容を確認する.

    str( x4 ) #  と記述しデータフレーム x4 のデータ構造を確認する.もっと内容の修正が必要である.


    
    > x4 <-x3[ c(2,3,4),] # サンプル番号1を削除する
    > x4
           X1 X2 X3 X4 X5
    変数A  1  2  3  4  5
    変数B  1  2  3  4  5
    変数C  1  2  3  4  5
    
    > colnames(x4) <- c("変数か", "変数き", "変数く", "変数け", "変数こ") # 変数名を新たにつける
    
    # rownames(x4) <- c("変数A", "変数B", "変数C")# サンプル名を新たにつける場合
    
    > x4
           変数か 変数き 変数く 変数け 変数こ
    変数A      1      2      3      4      5
    変数B      1      2      3      4      5
    変数C      1      2      3      4      5
    
    > str(x4) # 測定値が数値型でなく因子型のままである
    'data.frame':   3 obs. of  5 variables:
     $ 変数か: Factor w/ 2 levels "1","変数か": 1 1 1
      ..- attr(*, "names")= chr  "変数A" "変数B" "変数C"
     $ 変数き: Factor w/ 2 levels "2","変数き": 1 1 1
      ..- attr(*, "names")= chr  "変数A" "変数B" "変数C"
     $ 変数く: Factor w/ 2 levels "3","変数く": 1 1 1
      ..- attr(*, "names")= chr  "変数A" "変数B" "変数C"
     $ 変数け: Factor w/ 2 levels "4","変数け": 1 1 1
      ..- attr(*, "names")= chr  "変数A" "変数B" "変数C"
     $ 変数こ: Factor w/ 2 levels "5","変数こ": 1 1 1
      ..- attr(*, "names")= chr  "変数A" "変数B" "変数C"
    


    (6) 変数のデータの型を因子型から数値型に変換

    Rの「コンソール」画面に,

    fix( x4 ) #  と記述しデータを表シートに表示する.





    「変数か」〜「変数こ」をクリックすると「変数エディタ」が現れ,変数の型が表示される.

    これらの変数は[character][factor]因子型であるので,これを全て[numeric]の数値型に変更する.





    str(x4) #  と記述しデータ構造を確認する.


    
    > fix(x4) # 表シートで「変数か〜こ」の測定値を[character]から数値型[numeric]に変換する
    
    > str(x4)
    'data.frame':   3 obs. of  5 variables:
     $ 変数か: num  1 1 1
     $ 変数き: num  2 2 2
     $ 変数く: num  3 3 3
     $ 変数け: num  4 4 4
     $ 変数こ: num  5 5 5
    


    全てをRでやろうとはしないこと.Excelで表の行と列を入れ替える

[ 目次に戻る ]