使用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
我希望这是有道理的。如果在其他地方被问到这个问题,我很抱歉,我真的花了很多时间并没有找到这样的东西。
提前谢谢了!
只需使用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)