2015-10-29 7 views
5

データフレームを2回変異させ、互いに交差する2組の列でグループ分けしたいと思います。すなわち:dplyrで別のグループを追加する

df <- df %>% group_by(a, b) %>% mutate(x = sum(d)) 
df <- df %>% group_by(a, b, c) %>% mutate(y = sum(e)) 

これを行うにはもっと速く/もっとエレガントな方法がありますか?私のような何かを行うことができるように期待していた:

df <- df %>% 
    group_by(a, b) %>% 
    mutate(x = sum(d)) %>% 
    group_by(c) %>% 
    mutate(y = sum(e)) 

それとも、適用された第1 group_byの変数を保存し、それを2回使用しています。

答えて

7

アドオン= FALSE我々は、デフォルトでは?group_by

のドキュメントによると、OPの例 -

df %>% 
    group_by(a, b) %>% 
    mutate(x = sum(d)) %>% 
    group_by(c, add=TRUE) %>% 
    mutate(y = sum(e)) 

cを追加し、3つの変数によってグループに2つ目のgroup_byadd=TRUEを使用group_byは既存のグループを上書きします。 ではなく、既存のグループに追加するには、TRUE =追加

を使用するこれが唯一の非dplyrish機能を備えた、1回のgroup_byコールで行うことができます

df %>% 
    group_by(a, b) %>% 
    mutate(x = sum(d), y = ave(e, c, sum)) 
+2

'GROUP_BYを(使用しているときinconsitencyを期待しています。 ..、add = TRUE) 'と' data.table':https://github.com/hadley/dplyr/issues/1459 –

+0

私は 'length'と' rank'を使っていますので、後者のオプションは知っているが、使いやすい。 –

関連する問題