使用dplyr汇总的自定义函数

时间:2015-07-23 11:58:53

标签: r statistics dplyr

我的数据框看起来像这样:

row     year    rainfall area species density rainfall1
1   46  1993    433.70  br  red 2.9300000   low
2   47  1994    365.65  br  red 8.0000000   low
3   48  1996    545.80  br  red 5.8558559   high
4   49  1999    785.40  br  red 17.0158617  high
5   50  2000    736.30  br  red 8.8778409   high
6   51  2001    370.40  br  red 6.9874901   low
7   52  2002    174.80  br  red 2.0579308   low
8   53  2003    290.50  br  red 7.6328655   low
9   54  2004    424.40  br  red 7.4234908   low
10  55  2005    336.30  br  red 0.7580045   low
11  56  2007    524.40  br  red 0.4500000   high

这重复得到4个区域和2个物种给出120个结果。

我想在该区域/物种中添加一个具有该年相对密度的新列(以百分比表示)。我写了一个小函数来得到相对密度:

relative <- function(x) (x/sum(x)) * 100

我不确定如何使用group_by和summaryrize函数获取正确的数据集。我需要能够检索给定年份,物种,面积和降雨类别的所有密度

任何帮助?

1 个答案:

答案 0 :(得分:2)

在基础R中它就是这样的:

df$sumval <- tapply(df$density, list(df$year, df$area, df$species), sum )
df$perce <- df$density / df$sumval

但正如我在评论中所说,结果总是1,因为每年只有一个值。