2017-02-09 70 views
0

我想根据两列中的值来总结一个数据框,除了每列实际上有相同的变量,我不在乎什么订单是。下面是一个简单的数据帧:dplyr :: group_by两列相同的变量,顺序并不重要

> 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不必是数字,并且可能不总是连续的整数。

+0

也相关:http://stackoverflow.com/q/15495795/和http://stackoverflow.com/q/28047997/ – Frank

回答

5

我们可以做到这一点与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将评估'val1'列的输出如果我们有val1= pmin(val1, val2)

+1

很简单!谢谢。 – oregano