2017-10-16 2 views
1

Ich versuche, diesen Code zu nehmen und es in eine Funktion drehen:r: dplyr Funktion Langformat mit mehreren Gruppen machen

mtcars %>% group_by(gear) %>% select(hp, disp) %>% 
summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>% 
gather(variable, value, -gear) %>% 
arrange(gear, sub('_.*', '', variable), sub('.*_', '', variable)) %>% 
separate(variable, into = c('var', 'metric'), '_') 

Was sie tut, ist ein Datenrahmen erstellen, die ich einfach in Excel importieren und erstelle Drehpunkte mit. Ich habe folgendes versucht, aber es scheint nicht zu funktionieren:

mean_func <- function(vars,groups) { 
    results <- test %>% group_by_at(vars(one_of(groups))) %>% 
    summarise_at(vars(starts_with(vars)), funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>% 
    gather_(variable, value, -groups) %>% 
    arrange_(groups) %>% 
    separate_(variable, into = c('var', 'metric'), '_'); View(results) 
} 

Scheint, wie das Problem irgendwo entlang der gather Aussage ist, aber ich bin nicht sicher, was hier falsch sein könnte. Irgendwelche Gedanken?

+2

Dies scheint so rückwärts. Warum sollten Sie sich die Mühe machen, Daten in R zu bekommen, nur um sie zu Pivot-Tabellen zu exportieren? Wie auch immer, die Programmierung mit dplyr/tidyr-Verben hat sich geändert. Siehe: http://dplyr.tidyverse.org/articles/programming.html – boshek

+0

Da die Benutzerzielgruppe die Pivot-Tabellen benötigt, können sie die Daten problemlos bearbeiten und durchsuchen. Es ist nicht mein Ruf, oder ich würde einfach nur alles aufzeichnen. – vashts85

Antwort

1

Verwenden Sie ein Bit der tidy Bereinigung, um die Gruppierungsvariable zu ändern, und verwenden Sie group_by_ für die Programmierung.

library(tidyverse) 

mean_func <- function(vars, groups) { 
    groups = enquo(groups) 

    vars %>% 
     group_by_(groups) %>% 
     dplyr::select(hp, disp) %>% 
     summarise_all(funs(n=sum(!is.na(.)), mean=mean(.,na.rm=T))) %>% 
     gather(variable, value, -!!groups) %>% 
     arrange(!!groups, sub('_.*', '', variable), sub('.*_', '', variable)) %>% 
     separate(variable, into = c('var', 'metric'), '_') 
} 
mean_func(mtcars, gear) 
Verwandte Themen