从dplyr group_by()tbl中的其他值中减去特定行的值

时间:2018-05-17 20:28:57

标签: r dplyr

为此写标题比预期更困难。

我的数据看起来像这样:

   scenario type value
1         A    U   922
2         A    V   291
3         A    W   731
4         A    X   970
5         A    Y   794
6         B    U   827
7         B    V    10
8         B    W   517
9         B    X    97
10        B    Y   681
11        C    U    26
12        C    V   410
13        C    W   706
14        C    X   865
15        C    Y   385
16        D    U   473
17        D    V   561
18        D    W   374
19        D    X   645
20        D    Y   217
21        E    U   345
22        E    V    58
23        E    W   437
24        E    X   106
25        E    Y   292

我尝试做的是从每个方案中的所有值中减去type == W的值。因此,例如,在完成此命令后,方案 A 将如下所示:

  scenario type value
1        A    U   191
2        A    V  -440
3        A    W     0
4        A    X   239
5        A    Y    63

......等等

我想我可以使用dplyr::group_by()mutate(),但我不确定在mutate命令中放入什么

1 个答案:

答案 0 :(得分:3)

您可以使用dplyr执行此操作。在mutate函数中,您只需查询which的类型为" W"然后从原始值中减去它。

library(dplyr)
df %>% group_by(scenario) %>% mutate(value = value - value[which(type == "W")])
# A tibble: 25 x 3
# Groups: scenario [5]
#   scenario type  value
#   <fct>    <fct> <int>
# 1 A        U       191
# 2 A        V      -440
# 3 A        W         0
# 4 A        X       239
# 5 A        Y        63
# 6 B        U       310
# 7 B        V      -507
# 8 B        W         0
# 9 B        X      -420
#10 B        Y       164
## ... with 15 more rows