Use column index instead of name in group_by

后端 未结 4 1746
陌清茗
陌清茗 2021-01-11 23:29

I want to summarize a dataframe with dplyr, like so:

> test <-data.frame(ID = c(\"A\", \"A\", \"B\", \"B\"), val = c(1:4))
> test %>% group_by(ID         


        
4条回答
  •  刺人心
    刺人心 (楼主)
    2021-01-12 00:11

    If we need to use NSE, then sym and !! can be used

    test %>%
         group_by(!! rlang::sym(names(.)[1])) %>%
         summarise(av = mean(val))
    # A tibble: 2 x 2
    #      ID    av
    #   
    #1      A   1.5
    #2      B   3.5
    

    We can also create a function. If we pass quoted strings, then we use sym with !! or else go for the enquo/!! route

    f1 <- function(dat, grp, valueCol) {
         dat %>%
            group_by(!! rlang::sym(grp)) %>%
            summarise(av = mean(!! rlang::sym(valueCol)))
    }
    
    f1(test, "ID", "val")
    # A tibble: 2 x 2
    #      ID    av
    #   
    #1      A   1.5
    #2      B   3.5
    

提交回复
热议问题