【问题标题】:custom functions with dplyr summarise使用 dplyr 的自定义函数汇总
【发布时间】:2015-07-23 11:58:52
【问题描述】:

我的数据框如下所示:

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 和 summarise 函数获取正确的数据集。我需要能够检索给定年份、物种、面积和降雨类别的所有密度

有什么帮助吗?

【问题讨论】:

  • 提供的数据只有一个area,而且每年只有一个值,很难提供一个例子,因为如果你按年份汇总并除以年份总和,你总是得到1。
  • 您的问题看起来像assignment,也许不是。要计算示例数据集中鸢尾花的相对 Sepal.Length,您可以执行 iris2 &lt;- iris %&gt;% group_by(Species) %&gt;% mutate(rel = Sepal.Length/sum(Sepal.Length)*100)
  • @Paul4forest 谢谢!我意识到这是使用 mutate 和我需要的正确分组的组合
  • 如果您找到了答案,请将其发布,最好使用reproducible code 并将其标记为已接受。

标签: r statistics dplyr


【解决方案1】:

在基础 R 中是这样的:

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

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

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 2014-10-14
    • 1970-01-01
    • 2020-11-04
    • 2021-05-07
    • 2020-12-27
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多