我有一个如下数据框,我想创建一个矩阵,其中根据3个招聘站点和5个招聘年份显示平均睡眠时间(SLP)。
SLP site year
8.6 1 2008
7.2 1 2005
6.4 2 2006
9.5 3 2007
6.1 2 2009
3.6 1 2005
8.6 1 2008
7.2 1 2005
6.4 2 2006
9.5 3 2007
6.1 2 2009
5.1 3 2008
2.1 2 2006
我想要的输出是:
1 2 3
2005 6.00 - -
2006 - 4.97 -
2007 - - 9.5
2008 8.60 - 5.1
2009 - 6.10 -
列名是站点的变量,行名是年份的变量,每个单元格中的值是SLP的平均值。我该怎么做呢?
最佳答案
我们可以使用acast
library(reshape2)
acast(df1, year~site, value.var="SLP", mean)
或者使用
tapply
中的base R
with(df1, tapply(SLP, list(year, site), FUN = mean))