Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dplyr: whats the difference between group_by and group_by_ functions?

Tags:

r

dplyr

I can't figure out what the underscore-based function is for the group_by_() function.

From the group_by help:

by_cyl <- group_by(mtcars, cyl)  
summarise(by_cyl, mean(disp), mean(hp))  

yields the expected:

Source: local data frame [3 x 3]  
    cyl mean(disp)  mean(hp)
1   4   105.1364  82.63636
2   6   183.3143 122.28571
3   8   353.1000 209.21429

but this:

by_cyl <- group_by_(mtcars, cyl)  

yields an error:

"Error in as.lazy_dots(list(...)) : object 'cyl' not found"  

So my question is what does the underscore version do? And also, under what circumstances would I want to use it, rather than the "regular" one?

Thanks

like image 494
hackR Avatar asked Feb 23 '15 04:02

hackR


People also ask

What does group_by () do in R?

The group_by() function in R is from dplyr package that is used to group rows by column values in the DataFrame, It is similar to GROUP BY clause in SQL. R dplyr groupby is used to collect identical data into groups on DataFrame and perform aggregate functions on the grouped data.

What does group by do in dplyr?

group_by() takes an existing tbl and converts it into a grouped tbl where operations are performed "by group". ungroup() removes grouping.

What is N () in R?

The function n() returns the number of observations in a current group.


1 Answers

The dplyr Non-Standard Evaluation vignette helps here: http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html

Note: the above link is now out of date, but the same information can be found on the github page for the package. https://github.com/tidyverse/dplyr/blob/34423af89703b0772d59edcd0f3485295b629ab0/vignettes/nse.Rmd

Dplyr uses non-standard evaluation (NSE) in all of the most important single table verbs: filter(), mutate(), summarise(), arrange(), select() and group_by(). NSE is important not only to save you typing, but for database backends, is what makes it possible to translate your R code to SQL. However, while NSE is great for interactive use it’s hard to program with. This vignette describes how you can opt out of NSE in dplyr, and instead rely only on SE (along with a little quoting).

...

Every function in dplyr that uses NSE also has a version that uses SE. There’s a consistent naming scheme: the SE is the NSE name with _ on the end. For example, the SE version of summarise() is summarise_(), the SE version of arrange() is arrange_(). These functions work very similarly to their NSE cousins, but the inputs must be “quoted”

like image 137
r.bot Avatar answered Oct 20 '22 14:10

r.bot