をacast
library(reshape2)
acast(df1, year~site, value.var="SLP", mean)
またはtapply
を使用してを使用することができます何のパッケージを使用していないいくつかの異なるソリューションです:
1)tapplyこれはパッケージを使用しません。これは、NAの"matrix"
出力が空のセルの値生成:与える
tapply(DF$SLP, DF[c("year", "site")], mean)
:
site
year 1 2 3
2005 6.0 NA NA
2006 NA 4.966667 NA
2007 NA NA 9.5
2008 8.6 NA 5.1
2009 NA 6.100000 NA
2)凝集体/ XTABSこれはaggregate
+ xtabs
を使用します。これは、空のセルのためのゼロ値を持つクラスc("xtabs", "table")
のオブジェクト作成:
fo <- SLP ~ year + site
xtabs(fo, aggregate(fo, DF, mean))
与えると、
site
year 1 2 3
2005 6.000000 0.000000 0.000000
2006 0.000000 4.966667 0.000000
2007 0.000000 0.000000 9.500000
2008 8.600000 0.000000 5.100000
2009 0.000000 6.100000 0.000000
3)凝集/整形これもaggregate
を使用するが、reshape
なくxtabs
を使用します。それは、空のセルに対してNAを有するデータフレームr
を与える。最後の行は、列名を従来の解決策と一致させ、重要でない場合は省略することができます。
ag <- aggregate(SLP ~ site + year, DF, mean)
r <- reshape(ag, dir = "wide", idvar = "year", timevar = "site")
names(r) <- sub(".*[.]", "", names(r))
与える:
> r
year 1 2 3
1 2005 6.0 NA NA
3 2006 NA 4.966667 NA
5 2007 NA NA 9.5
2 2008 8.6 NA 5.1
4 2009 NA 6.100000 NA
注:使用再現形で入力DF
である:
DF <- structure(list(SLP = c(8.6, 7.2, 6.4, 9.5, 6.1, 3.6, 8.6, 7.2,
6.4, 9.5, 6.1, 5.1, 2.1), site = c(1L, 1L, 2L, 3L, 2L, 1L, 1L,
1L, 2L, 3L, 2L, 3L, 2L), year = c(2008L, 2005L, 2006L, 2007L,
2009L, 2005L, 2008L, 2005L, 2006L, 2007L, 2009L, 2008L, 2006L
)), .Names = c("SLP", "site", "year"), class = "data.frame", row.names = c(NA,
-13L))
"。"あなたのコマンドの最初の引数(例えば、 'df%>%group_by(year、site)')は最初の2行と同様に動作します。 Tidyverse動詞は、データフレームを最初の引数として自動的に期待し、そうでなければ指定しない限り、パイプラインされているものを使用します。 –
それを指摘していただきありがとうございます、@RoseHartman – Adam