【问题标题】:R Conditional Summing (condition within group)R条件求和(组内条件)
【发布时间】:2018-03-06 23:21:04
【问题描述】:

在 R 中使用 dplyr 进行条件求和似乎存在不少威胁,但我阅读的所有威胁均无助于回答以下问题。

我有以下数据集:

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】:

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

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 2011-05-20
      • 2016-11-19
      • 1970-01-01
      • 2014-04-13
      • 2023-03-20
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多