2016-08-04 14 views
-1

これは何度も尋ねられたことはわかっていますが、過去2日間インターネットをスクロールして、ピボットテーブルやサマリーテーブルを作成するのに必要なヘルプを見つけることができません優れています。私は完全に非識字者のようにRに全く新しいので、Rパッケージのほとんどの例がファイルの手ほどきを複雑にしています。Rピボットテーブルを作成するR

私はこの

Phase class NISP 
    <chr> <chr> <int> 
1  L Aves 11 
2  L Fish 128 
3  L Mammals 14 
4  K Aves 63 
5  K Fish 30 
6  K Mammals 311 
7  J Aves 170 
8  J Fish 327 
9  J Mammals 740 
10  I Aves 45 
# ... with 18 more rows 

のように見えるデータのリスト( "集合体")を持っていると私は()

pivot <-dcast(assemblage, Phase ~ class, fun.aggregate = sum, value.var = "NISP", margins = TRUE) 

dcast使用して、表のように要約/ピボットテーブルを行うことができました以下の結果と

Phase Aves Fish Indeterminate Mammals (all) 
1  A 1 0    0  6  7 
2  B 2 0    0  3  5 
3  C 58 20    0  255 333 
4  E 5 2    0  5 12 
5  F 14 0    0  17 31 
6  H 121 154    1  784 1060 
7  I 45 110    0  149 304 
8  J 170 327    0  740 1237 
9  K 63 30    0  311 404 
10  L 11 128    0  14 153 
11 (all) 490 771    1 2284 3546 

しかし、私は私が把握することはできませんことを、今必要なのです。

  • は、次の順序( "フェーズ"、 "哺乳類"、 "魚"、 "鳥類"、 "不定"、 "合計")
  • アドオンで "合計"
  • ための列を持つ(すべて)を交換します各段階ごとに各動物クラスのパーセンテージ(行合計の割合)を持つ新しい列。

答えて

0

以下のコードは、すべてを段階的に実行する必要があります。何かが不明な場合は、私に知らせてください。

# make some data 
df = data.frame(Phase = c(1, 1, 2, 2, 3), 
       Fish = floor(rnorm(5, 150)), 
       Mammal = floor(rnorm(5, 50))) 

df$all = rowSums(df[, 2:3]) 

# 1 change name 
names(df)[which(names(df) == 'all')] = 'Total' 

# 2 - reverse Fish and Mammal 
idx1 = 2:3 # columns to change 
idx2 = 3:2 # new order of columns 
df[, idx1] = df[, idx2] 
names(df)[idx1] = names(df)[idx2] 

# 3 - calculate percentages 
idxT = 2:3 # column indices of interest 

newColNames = paste('%', names(df)[idxT]) 

tmp = df[, idxT, drop = FALSE]/matrix(df["Total"], ncol = length(idxT)) 
colnames(tmp) = newColNames 
df = cbind(df, tmp) 
+0

大変ありがとうございます。ラテックスでの輸入のためにちょっと整理されていますが、現時点では問題ありません。 – scotgis

+0

よろしくお願いします。あなたがAPAのガイドラインでラテックスを使いたいなら、私はRパッケージ 'xtable'を見てみることをお勧めします。それは引数として行列またはデータフレームをとり、APAフォーマットのラテックステーブルを返す関数 'xtable'を持っています。 – Vandenman

+0

素晴らしい感謝、私はそれをチェックします! – scotgis

関連する問題