How to define a function in dplyr?

后端 未结 1 2063
天涯浪人
天涯浪人 2021-01-05 21:35

I created a simple pivot table in the dplyr package in R. Here is my working example:

library(dplyr)
mean_mpg <- mean(mtcars$mpg)

# creating         


        
相关标签:
1条回答
  • 2021-01-05 22:27

    If you have the most recent rlang library update v0.4.0 (June 2019), you can use double curly brackets {{ }} (aka "curly curly") to make programming with dplyr easier.

    # Note: needs installation of rlang 0.4.0 or later
    get_pivot <- function(data, predictor,target) {
      result <-
        data %>%
        group_by(as.factor( {{ predictor }} )) %>%
        summarise(sum=sum( {{ target }} ),total=n()) %>%
        mutate(percentage=sum*100/total);
    
      print(result)
    }
    
    # Edit -- thank you Rui Barradas
    > get_pivot(mtcars, cyl, mpg_cat)
    # A tibble: 3 x 4
      `as.factor(cyl)`   sum total percentage
      <fct>            <dbl> <int>      <dbl>
    1 4                   11    11      100  
    2 6                    3     7       42.9
    3 8                    0    14        0  
    

    The reason this is required is that dplyr and other tidyverse packages use "non-standard evaluation" like you encounter with some base R functions, like lm(mpg~factor(am),data=mtcars). This practice often makes "interactive" code shorter, simpler, and easier to read, but at the cost of making programming more complicated. In this case, the {{ }} operator serves to transport the column you specify into the context of the function.

    https://www.tidyverse.org/articles/2019/06/rlang-0-4-0/

    0 讨论(0)
提交回复
热议问题