【问题标题】:dplyr::group_by two columns of same variables, order doesn't matter [duplicate]dplyr::group_by 两列相同的变量,顺序无关紧要[重复]
【发布时间】:2017-02-09 18:30:49
【问题描述】:

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

> 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 不一定是数字,也不一定是连续整数。

【问题讨论】:

标签: r dplyr


【解决方案1】:

我们可以使用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 在 cmets 中提到的那样,使用更改名称是故意的(val_1val1val_2 代替 val2),因为第二条语句 pmax 将评估来自'val1' 列,如果我们有 val1= pmin(val1, val2)

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 2011-05-09
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2012-11-10
    相关资源
    最近更新 更多