2017-02-09 7 views
0

2つの列の値に従ってデータフレームを要約したいのですが、実際には各列に同じ変数がありますが、注文です。ここではサンプルデータフレームである:dplyr :: group_by同じ変数の2つの列、順序は関係ありません

> 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 

私は私だけval1val2順不同組み合わせを気以外val3上で要約に興味があります。だから、例えば私は、列ごとのグループにdplyr使用して、次のようにまとめることができ

val1 val2 val3 
1 1 2 20 

同じ

val1 val2 val3 
1 2 1 40 

として扱いたい:

> 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 

しかし、私はこの結果にしたいです2行しか含んでいません!

私はval1val2の組み合わせを反映する新しい変数を作成し、それをグループ化することを考えましたが、これを簡単に理解することはできません。 val1val2は数値である必要はなく、常に連続した整数であるとは限りません。

+0

関連項目:http://stackoverflow.com/q/15495795/ http://stackoverflow.com/q/15495795// – Frank

答えて

5

私たちは、グループ化変数

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はコメントで述べたように作成するpminpmaxでこれを行うことができ、変更された名称の使用はval2の代わりに、意図的(val_1val1またはval_2ました)を2番目のステートメントとして使用するとpmaxは 'val1'カラムの出力を評価します。val1= pmin(val1, val2)

+1

非常に簡単!ありがとうございました。 – oregano

関連する問題