更新: 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