R条件求和(组内条件)

R Conditional Summing (condition within group)

似乎有很多关于使用 dplyr 在 R 中进行条件求和的威胁,但我通读的 none 有助于回答以下问题。

我有以下数据集:

ID  Code  Value  AnnualChange

1   123    100       0.01
2   123    200       0.05
3   123    150       0.1
4   124    200       0.01
5   124    250       0.1
6   124    200       0.2

我想做的是得到一个额外的列,它会给我一个特定代码的所有项目的总和,增长超过 2%。此外,我希望有一个列显示每个代码中快速增长项目的比例。因此,结果将如下所示:

 ID  Code  Value  AnnualChange  FastGrowing   Proportion

    1   123    100       0.01        350           0.77
    2   123    200       0.05        350           0.77
    3   123    150       0.1         350           0.77
    4   124    200       0.01        450           0.69
    5   124    250       0.1         450           0.69
    6   124    200       0.2         450           0.69

我希望这是有道理的。很抱歉,如果有人在其他地方问到这个问题,我真的花了很多时间,没有找到类似的东西。

非常感谢!

只需使用ifelse:

library(dplyr)
dat %>%
    group_by(Code) %>%
    mutate(FastestGrowing = sum(ifelse(AnnualChange >= .02, Value, 0)),
           Proportion = FastestGrowing / sum(Value))

     ID  Code Value AnnualChange FastestGrowing Proportion
  <int> <int> <int>        <dbl>          <dbl>      <dbl>
1     1   123   100       0.0100           350.      0.778
2     2   123   200       0.0500           350.      0.778
3     3   123   150       0.100            350.      0.778
4     4   124   200       0.0100           450.      0.692
5     5   124   250       0.100            450.      0.692
6     6   124   200       0.200            450.      0.692

数据

dat <- read.table(text = "ID  Code  Value  AnnualChange
                  1   123    100       0.01
                  2   123    200       0.05
                  3   123    150       0.1
                  4   124    200       0.01
                  5   124    250       0.1
                  6   124    200       0.2", header = TRUE)