根据条件找出组内的差异

时间:2018-11-28 20:10:08

标签: r dplyr

我有一个带有以下条目的数据框;

V1 zipcode year V2 1 11747 2012 5 2 11747 2012 10 3 11747 2012 20 4 11747 2012 15 1 11000 2012 20 2 11000 2012 15 3 11000 2012 20

我想找到每个邮政编码年组合的V1最大值在V2中的差异。在这种情况下为15-5和20-20。

我希望结果看起来像这样:

V1 zipcode year V2 V3 1 11747 2012 5 10 2 11747 2012 10 10 3 11747 2012 20 10 4 11747 2012 15 10 1 11000 2012 20 0 2 11000 2012 15 0 3 11000 2012 20 0

因此,由于我尝试使用group by并按以下条件进行变异: df %>% group_by(year, zipcode) %>% mutate(difV2 = df[df$V1== max(df$V1),4] - df[df$V1== min(df$V1),4]) 任何提示将不胜感激!

1 个答案:

答案 0 :(得分:1)

group_by之后,我们只需要使用列名而不是df$V1。当我们执行df$V1时,它将提取整个列,而不是该组特定的值。

library(dplyr)
df %>% 
  group_by(year, zipcode) %>% 
  mutate(V3 = V2[V1== max(V1)] - V2[V1== min(V1)])
# A tibble: 7 x 5
# Groups:   year, zipcode [2]
#     V1 zipcode  year    V2    V3
#  <int>   <int> <int> <int> <int>
#1     1   11747  2012     5    10
#2     2   11747  2012    10    10
#3     3   11747  2012    20    10
#4     4   11747  2012    15    10
#5     1   11000  2012    20     0
#6     2   11000  2012    15     0
#7     3   11000  2012    20     0