我有一个如下数据框,我想创建一个矩阵,其中根据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))

09-18 22:31