1

次の (サンプル) データと crosstab() を使用してクロステーブル データセットを作成しました。この方法を使用すると、データのないすべての列 x 行の組み合わせが、出力データセットでゼロになります。データセットには真のゼロ値があり、それ以外の場合は区別できないため、それらを NA にしたいと思います。さらに、xtabs() を試してみたところ、同じ問題が発生しました。NAまたは別の方法を取得するための提案は非常に高く評価されています。

WW1_Data <- structure(list(Site_Name = c("Alnön", "Alnön", "Alnön", "Ammarnäs",
"Ammarnäs", "Anjan", "Anjan", "Bäcksand", "Bäcksand", "Fittjebodarna",
"Fittjebodarna", "Flatruet", "Flatruet", "Flatruet", "Flatruet",
"Glen", "Glen", "Glen", "Idre", "Idre"), Year = c("1996", "2000",
"2010", "1996", "2011", "2009", "2010", "2000", "2010", "2008",
"2009", "2008", "2009", "2010", "2011", "2008", "2009", "2010",
"1996", "2010"), WW1_Pct_2 = c(0.307692307692308, 0.260869565217391,
0.0833333333333333, 0.75, 0.8, 0.52, 0.5, 0.0833333333333333,
0.375, 0.4, 0.423076923076923, 0.85, 0.483870967741935, 0.56,
0.58, 0.777777777777778, 0.555555555555556, 0.521739130434783,
0.4, 0)), .Names = c("Site_Name", "Year", "WW1_Pct_2"), row.names = c(3L,
4L, 5L, 8L, 9L, 10L, 11L, 15L, 16L, 28L, 29L, 30L, 31L, 32L,
33L, 42L, 43L, 44L, 59L, 60L), class = "data.frame")

xtabs(WW1_Pct_2 ~ Site_Name + Year, WW1_Data)

## alternatively ##

library(ecodist)
WW1_XTAB  <- data.frame(with(WW1_Data, crosstab(Site_Name, Year, WW1_Pct_2)))
4

3 に答える 3

3

xtabs で集計するときに使用する関数は、tapplysumを使用してデフォルト設定の na.rm=FALSE で使用できます。

> with(WW1_Data, tapply(WW1_Pct_2, list(Site_Name,  Year), sum )  )
                      1996          2000         2008         2009          2010 2011
Alnön         0.3076923077 0.26086956522           NA           NA 0.08333333333   NA
Ammarnäs      0.7500000000            NA           NA           NA            NA 0.80
Anjan                   NA            NA           NA 0.5200000000 0.50000000000   NA
Bäcksand                NA 0.08333333333           NA           NA 0.37500000000   NA
Fittjebodarna           NA            NA 0.4000000000 0.4230769231            NA   NA
Flatruet                NA            NA 0.8500000000 0.4838709677 0.56000000000 0.58
Glen                    NA            NA 0.7777777778 0.5555555556 0.52173913043   NA
Idre          0.4000000000            NA           NA           NA 0.00000000000   NA

as.data.frame返されるオブジェクト クラスであるテーブル (特殊な種類のマトリックス) 用のメソッドがありtapplyます。as.data.frameの結果reshapeはすでにデータフレームだったので、の使用は不要です。

于 2012-08-04T18:53:07.223 に答える
1

これでうまくいきました。他のソリューションも歓迎します!

WW1_XTAB <- as.data.frame(reshape(WW1_Data,idvar="Site_Name",timevar="Year",direction="wide"))
于 2012-08-04T12:32:53.000 に答える