裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

matrix ではなく data.frame を使うべき場合

2010年09月01日 | ブログラミング
Taglibro de H

http://ito-hi.blog.so-net.ne.jp/2008-12-02?comment_success=2010-09-01T15:26:42&time=1283322402
R: order()で並べ替え [統計] [編集]

こういうデータがあったとする。

m <- matrix(c(
    261, "コナラ","Quercus serrata",
     65, "ウリハダカエデ","Acer rufinerve",
    288, "アケビ","Akebia quinata",
    177, "モチツツジ","Rhododendron macrosepalum",
    288, "ミツバアケビ","Akebia trifoliata",
     51, "タラノキ","Aralia elata",
    261, "アラカシ","Quercus glauca",
    261, "アベマキ","Quercus variabilis",
    177, "コバノミツバツツジ","Rhododendron reticulatum",
    171, "エゴノキ","Styrax japonica"),
  ncol = 3, byrow = TRUE)

途中省略

ただし、日本語ではうまく並び替えできない。
> m[order(as.numeric(m[,1]), m[,2]),]
      [,1]  [,2]                 [,3]                      
 [1,] "51"  "タラノキ"           "Aralia elata"            
 [2,] "65"  "ウリハダカエデ"     "Acer rufinerve"          
 [3,] "171" "エゴノキ"           "Styrax japonica"         
 [4,] "177" "モチツツジ"         "Rhododendron macrosepalum"
 [5,] "177" "コバノミツバツツジ" "Rhododendron reticulatum"
 [6,] "261" "コナラ"             "Quercus serrata"         
 [7,] "261" "アベマキ"           "Quercus variabilis"      
 [8,] "261" "アラカシ"           "Quercus glauca"          
 [9,] "288" "アケビ"             "Akebia quinata"          
[10,] "288" "ミツバアケビ"       "Akebia trifoliata"  


matrix では 1 列目も character になってしまっている。
また,2 列目は character だけど,エンコーディングのバイトが辞書順になっていない。
解決法は,元のデータを data.frame として定義する。そうすれば,うまくいく。

> m <- read.csv(stdin(), header=FALSE)
0:     261, "コナラ","Quercus serrata"
1:      65, "ウリハダカエデ","Acer rufinerve"
2:     288, "アケビ","Akebia quinata"
3:     177, "モチツツジ","Rhododendron macrosepalum"
4:     288, "ミツバアケビ","Akebia trifoliata"
6:      51, "タラノキ","Aralia elata"
7:     261, "アラカシ","Quercus glauca"
8:     261, "アベマキ","Quercus variabilis"
9:     177, "コバノミツバツツジ","Rhododendron reticulatum"
10:     171, "エゴノキ","Styrax japonica"
11:
>

> m
    V1                  V2                        V3
1  261              コナラ           Quercus serrata
2   65      ウリハダカエデ            Acer rufinerve
3  288              アケビ            Akebia quinata
4  177          モチツツジ Rhododendron macrosepalum
5  288        ミツバアケビ         Akebia trifoliata
6   51            タラノキ              Aralia elata
7  261            アラカシ            Quercus glauca
8  261            アベマキ        Quercus variabilis
9  177  コバノミツバツツジ  Rhododendron reticulatum
10 171            エゴノキ           Styrax japonica

> m[order(m[,1], m[,2]),]
    V1                  V2                        V3
6   51            タラノキ              Aralia elata
2   65      ウリハダカエデ            Acer rufinerve
10 171            エゴノキ           Styrax japonica
9  177  コバノミツバツツジ  Rhododendron reticulatum
4  177          モチツツジ Rhododendron macrosepalum
8  261            アベマキ        Quercus variabilis
7  261            アラカシ            Quercus glauca
1  261              コナラ           Quercus serrata
3  288              アケビ            Akebia quinata
5  288        ミツバアケビ         Akebia trifoliata

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 分散0の列を取り除く | トップ | ユークリッドの互除法 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事