ぼやかないつもりのメモ(ブログ Ver)

つぶやきとメモの記録。更新はぼちぼち。

stackとunstack

中澤先生データフレームをstack/unstackする方法のPDFをみて、感激!これを今まで知らなかったのは残念で仕方がない。とりあえず、簡単な使い方をメモしておく。元の列名とスタック後の分類で違う名前を使うことも考えて、XやYとなっているところだけちょっといじって、値は乱数で発生させてみた。

hight.a <- rnorm(10, 170, 10)
hight.b <- rnorm(20, 165, 5)
dat.hight <- stack(list(A = hight.a, B = hight.b))
list.hight <- unstack(dat.hight)
# もしベクターの長さが同じだった場合
dat.hight2 <- unstack(dat.hight)

ここでdat.hightは下の表のようなデータフレームになるし、list.hightはリストとして出力される。ただし、dat.hight2のように、ベクターの長さが等しい場合は、unstackしたものもデータフレームとして出力される。

> dat.hight
     values ind
1  159.8873   A
2  161.4999   A
3  160.9917   A
4  152.0125   A
5  164.5801   A
6  157.8975   A
7  171.4593   A
8  170.0492   A
9  180.9407   A
10 155.2317   A
11 162.0887   B
12 165.9456   B
13 159.3085   B
14 169.2972   B
15 161.9310   B
16 162.5475   B
17 158.8080   B
18 159.8420   B
19 163.3767   B
20 162.9804   B
21 160.6166   B
22 167.0571   B
23 161.4490   B
24 167.3902   B
25 167.9150   B
26 166.2516   B
27 163.6089   B
28 170.2999   B
29 153.7978   B
30 166.1197   B

> list.hight
$A
 [1] 159.8873 161.4999 160.9917 152.0125 164.5801 157.8975 171.4593 170.0492
 [9] 180.9407 155.2317

$B
 [1] 162.0887 165.9456 159.3085 169.2972 161.9310 162.5475 158.8080 159.8420
 [9] 163.3767 162.9804 160.6166 167.0571 161.4490 167.3902 167.9150 166.2516
[17] 163.6089 170.2999 153.7978 166.1197

> dat.hight2 #もしベクターの長さが同じだった場合
          A        B
1  159.8873 168.0602
2  161.4999 163.6257
3  160.9917 163.2856
4  152.0125 164.4680
5  164.5801 161.1336
6  157.8975 158.3216
7  171.4593 166.2448
8  170.0492 154.0261
9  180.9407 161.8945
10 155.2317 165.8815