更新: 2016-11-22 16:46:34
生態学のデータ解析 - reshape(data.frame)
- なかなか記憶できない
reshape()の使いかた- 参照: R の data.frame, R の help()
- reshape() については 2010 年に書いたもので…その後,このあたりはいろいろと改善されました
- Iwasaki さんの 「tidyr — シンプルなデータ変形ツール」https://heavywatal.github.io/rstats/tidyr.html
[もくじ]
横長 → 縦長 (wide -> long)
> data.example # こういうデータがあったとする
forest treatment spc.1 spc.2 spc.3 spc.4 spc.5 spc.6 spc.7 spc.8 spc.9
1 A x 7 4 3 3 5 2 4 6 6
2 B x 3 9 5 5 4 1 3 5 5
3 C x 2 5 7 4 6 2 7 5 2
4 D x 4 5 5 2 4 6 5 9 5
5 A y 9 7 9 7 12 5 4 8 4
6 B y 2 5 5 3 4 2 1 6 4
7 C y 3 3 4 7 4 6 4 7 8
8 D y 4 3 3 9 8 4 3 5 4
9 A z 5 4 4 2 3 7 4 9 5
10 B z 4 4 7 5 4 6 4 7 6
11 C z 0 8 7 5 3 5 4 4 7
12 D z 5 3 5 7 4 7 5 5 1
> v.spc # こういう列名 vector をあらかじめ準備しとく [1] "spc.1" "spc.2" "spc.3" "spc.4" "spc.5" "spc.6" "spc.7" "spc.8" "spc.9"
- これは必ずしも
キー.数字という形式でなくてもよく,キー.文字列でも良い (例:spc.FagusC,spc.AcerMなど)
> de2 <- reshape(data.example, direction = "long", varying = v.spc)
> de2 <- de2[, 1:4]
> colnames(de2) <- c("forest", "treatment", "spc", "n")
> de2 # reshape() によって「長いカタチ」に変換された data.example
forest treatment spc n
1.1 A x 1 7
2.1 B x 1 3
3.1 C x 1 2
4.1 D x 1 4
5.1 A y 1 9
6.1 B y 1 2
7.1 C y 1 3
8.1 D y 1 4
9.1 A z 1 5
10.1 B z 1 4
11.1 C z 1 0
12.1 D z 1 5
1.2 A x 2 4
2.2 B x 2 9
3.2 C x 2 5
4.2 D x 2 5
5.2 A y 2 7
... (以下略) ...
注意
-
idという名の列があるとエラーがでる- 対策:
reshape()のオプションでidvar = "idnew"などなにかid以外の値を指定する
- 対策:
-
timeという名の列が勝手に追加される- この名前を変えたければ
reshape()のオプションでtimevar = "xyz"というふうに名前を指定する
- この名前を変えたければ
- 縦長にした data.frame にデータをくっつけたければ,
mergeが便利- 例:
de2 <- merge(de2, d.spc.data, by="spc") - help(merge) には使いかたの例がいろいろ示されています
- 例:
縦長 → 横長 (long -> wide)
> d # こういうデータがあったとする Plot Spc y 1 1 A 52 2 1 B 31 3 2 A 27 4 2 B 15
> reshape(d, timevar= "Spc", idvar = "Plot", direction = "wide") Plot y.A y.B 1 1 52 31 3 2 27 15