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