我有一个带有以下条目的数据框;
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])
任何提示将不胜感激!
答案 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