データの整形・変形パッケージ

  • reshapeパッケージと言うのがある
  • 大きく2つの働きでできている
    • melt系
    • cast系
  • melt系
    • データフレーム、行列・アレイ、リストのように、カテゴリ(のセット)があって、それに帰属する値があるときに
    • 「カテゴリ(のセット)」と値の組のにしてくれる
    • やってみる
    • データフレームの場合
      • 学年とクラスと体重
df <- data.frame(year=sample(1:3,1000,replace=TRUE),class=sample(1:4,1000,replace=TRUE),w = rnorm(1000,60,10))
molten.df <- melt(df,id=c("year","class","w"))
# 学年・クラスごとに平均
cast(molten.df,year~class,mean)
> cast(molten.df,year~class,mean)
Using w as value column.  Use the value argument to cast to override this choice
  year        1        2        3        4
1    1 61.39556 62.59706 59.72044 59.87468
2    2 59.47206 59.42091 60.54629 57.89266
3    3 58.56621 58.28452 59.95029 59.24901
# 学年ごとに平均
>|r|
cast(molten.df,~year,mean)
> cast(molten.df,~year,mean)
Using w as value column.  Use the value argument to cast to override this choice
  value        1        2        3
1 (all) 60.93173 59.31619 59.06995
library(reshape)
# 行列の場合。各行がグループで、同じ数のサンプルが列に納まっているとき
m <- matrix(1:20,4,5) # 4グループ
molten.m <- melt(m) # moltenはmeltの過去分詞
modlten.m
    • X1に行が現れている
> molten.m
   X1 X2 value
1   1  1     1
2   2  1     2
3   3  1     3
4   4  1     4
5   1  2     5
6   2  2     6
7   3  2     7
8   4  2     8
9   1  3     9
10  2  3    10
11  3  3    11
12  4  3    12
13  1  4    13
14  2  4    14
15  3  4    15
16  4  4    16
17  1  5    17
18  2  5    18
19  3  5    19
20  4  5    20
    • 行グループごとに平均を求めてみる
cast(molten.m,~X1,mean)
# apply()を使えば
apply(m,1,mean)
    • 行グループ(X1)ごとにボックスプロットしてみる
boxplot(molten.m$value~molten.m$X1)
# 以下と同じ
boxplot(t(m))
||
--行列ではなくてリストだったら
>|r|
k <- list()
k[[1]] <- rnorm(100,0,3)
k[[2]] <- rnorm(50,1,1)
k[[3]] <- rnorm(150,5,2)
molten.k <- melt(k)
boxplot(k)
boxplot(molten.k$value~molten.k$L1)
lapply(k,mean)