使用dplyr的组之间的操作

时间:2016-04-20 07:07:52

标签: r dplyr

我有一个数据框如下所示,我希望按grpindex对数据进行分组,并使用 a 组作为参考来执行一些简单的计算。我想从 a 组的值中减去其他组中的变量value

df <- data.frame(grp = rep(letters[1:3], each = 2), 
                 index = rep(1:2, times = 3), 
                 value = seq(10, 60, length.out = 6))

df


##   grp index value
## 1   a     1    10
## 2   a     2    20
## 3   b     1    30
## 4   b     2    40
## 5   c     1    50
## 6   c     2    60

所需的输出就像:

##   grp index value
## 1   b     1    20
## 2   b     2    20
## 3   c     1    40
## 4   c     2    40

我的猜测是接近:

group_by(df, grp, index) %>% 
  mutate(diff = value - value[grp == "a"])

理想情况下,我希望使用dplyr

此致,Philippe

1 个答案:

答案 0 :(得分:1)

我们可以filter为非'a'的'grp'然后在mutate内做差异。

df %>%
   filter(grp!="a") %>%
   mutate(value = value- df$value[df$grp=="a"])

或另一种选择是join

df %>% 
  filter(grp!="a")  %>%
  left_join(.,  subset(df, grp=="a", select=-1), by = "index") %>% 
  mutate(value = value.x- value.y)  %>% 
  select(1, 2, 5)
#   grp index value
#1   b     1    20
#2   b     2    20
#3   c     1    40
#4   c     2    40