2015-10-29 19 views
5

Bir veri çerçevesini iki kez birbiri ile kesişen iki sütun kümesine göre gruplandırmak istiyorum. i.e .:dplyr ile başka bir gruplama ekleme

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

Bunu yapmanın daha hızlı/daha zarif bir yolu var mı? Ben böyle bir şey yapmak mümkün umuyordum:

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

Ya da belki uygulanan ilk group_by ile bir değişken kaydetmek ve daha sonra iki kez kullanın.

cevap

7

Biz c ekleyerek 3 değişkenlere göre gruplandırmak ikinci group_by yılında add=TRUE kullanmak OP en örnek-

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

belgelerine göre, varsayılan olarak ?group_by

için zaman eklenti = YANLIŞ , group_by mevcut grupları geçersiz kılacaktır. yerine = eklemek varolan gruplara kullanın eklemek için DOĞRU

Bu seferki group_by çağrı yapılır, ancak sadece sigara dplyrish fonksiyonları ile yapılabilir: `group_by (kullanırken

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

inconsitency bekleyin. .., add = TRUE) 'ile bir' data.table': https://github.com/hadley/dplyr/issues/1459 –

+0

'length' ve' rank' kullanıyorum, bu yüzden sanmıyorum İkinci seçenek, bilindiği halde kullanılabilir, güzel. –