R条件求和(组内条件)

问题描述 投票:1回答:1

使用dplyr对R中的条件求和似乎存在相当多的威胁,但是我读过的那些都没有帮助回答以下问题。

我有以下数据集:

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

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

提前谢谢了!

r sum dplyr conditional
1个回答
1
投票

只需使用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

data

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)
© www.soinside.com 2019 - 2024. All rights reserved.