我有一个数据框如下所示,我希望按grp
和index
对数据进行分组,并使用 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
答案 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