2017-02-09 72 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