dplyr :: group_by两列相同的变量,顺序无关紧要

时间:2017-02-09 18:30:50

标签: r dplyr

我想根据两列中的值汇总一个数据框,除了每列实际上都有相同的变量,我不关心顺序是什么。这是一个示例数据框:

> df<-data.frame(val1=c(1,1,1,2,2), val2=c(1,2,2,1,1), val3=c(10, 20, 30, 40, 50))
> df
  val1 val2 val3
1    1    1   10
2    1    2   20
3    1    2   30
4    2    1   40
5    2    1   50

我有兴趣对val3进行总结,但我只关心val1val2无序组合。所以我想要处理

  val1 val2 val3
1    1    2   20

相同
  val1 val2 val3
1    2    1   40

我可以使用dplyr按列分组并总结如下:

> df %>% group_by(val1, val2) %>% summarize(mean=mean(val3))
Source: local data frame [3 x 3]
Groups: val1 [?]

   val1  val2  mean
  <dbl> <dbl> <dbl>
1     1     1    10
2     1     2    25
3     2     1    45

但我希望这个结果只包含两行!

我考虑创建一个反映val1val2组合的新变量,然后将其分组,但无法找到一种简单的方法。 val1val2不必是数字,可能不会总是连续的整数。

1 个答案:

答案 0 :(得分:6)

我们可以使用pminpmax来创建分组变量

df %>%
    group_by(val_1 = pmin(val1, val2), val_2 = pmax(val1, val2)) %>% 
    summarise(val3 = mean(val3))
#   val_1 val_2  val3
#  <dbl> <dbl> <dbl>
#1     1     1    10
#2     1     2    35

正如@Gregor在评论中提到的那样,更改名称的使用是故意的(val_1val1val_2代替val2)作为第二个陈述pmax将评估&#39; val1&#39;列,如果我们有val1= pmin(val1, val2)