2016-05-28 5 views
2

Mit einem data_frame:passieren in und auswerten, Optionen in group_by Funktion im dplyr Paket

Col_1 counts Date_Column 
    1  23  2015-01-01 
    2  44  2015-06-11 
    3  31  2015-07-21 
    2  22  2015-01-01 

ich mit dem dplyr Paket wie diese am Aggregieren:

aggregated <- data_frame %>% group_by(Col_1,week=week(Date_Column)) %>% summarise_each(funs(sum), -Date_Column) 

Aber ich mag enthalten diese in einer Funktion als solche:

collapse_frame <- function(data_frame, group_by_option, minus_option) { 
    aggregated <- data_frame %>% group_by(group_by_option) %>% summarise_each(funs(sum), -minus_option) 
    return() 
} 

Aber die group_by_option und minus_option nicht richtig bekommen ausgewertet.

Gibt es eine Möglichkeit, diese Optionen zu übergeben und sie in einer Funktion auszuwerten?

collapse_frame(my_frame, 'Col_1,week=week(Date_Column)', 'Date_Column') 

Ich habe versucht, die Verwendung von folgenden:

eval(parse(text=group_by_option)) 
as.formula(group_by_option) 
eval(group_by_option) 
+4

Willkommen bei SE dplyr. [Lesen Sie etwas] (http://adv-r.had.co.nz/Computing-on-the-language.html) (und 'Vignette ('nse', 'dplyr'))'), satt, und versuche es zu vermeiden. – alistaire

+0

In der Tat. Funktioniert mit einer Spalte, aber nicht mit 2. – Cybernetic

+1

Sie können das Argument '.dots' verwenden, das eine Liste aufnehmen kann. – alistaire

Antwort

2

Wie pro @ alistaire Vorschlag:

Liste der Spalten Gruppe von:

group_by_list <- list(Col_1, Date_Column) 

und ein Verfahren zum Durch in beliebigen Rahmen und Spaltennamen:

collapse_frame_by_sum <- function(data_frame, group_by_choice, minus_choice) { 
    collapsed_frame <- data_frame %>% group_by_(.dots=group_by_choice) %>% summarise_each(funs(sum), -eval(parse(text=minus_choice))) 
    collapsed_frame <- data.frame(collapsed_frame) 
    return(collapsed_frame) 
} 

Run as:

result <- collapse_frame_by_sum(my_frame, group_by_list, 'Date_Column') 
Verwandte Themen