无法在R中将动态变量名称与dplyr一起使用

I see the answers on this website, but it can not solve my problem.

What I want is that use dynamic variable names both on LHS and RHS within summarize.

这是一个简单的示例,显示我尝试过的内容:

why I use paste0('carb') not use carb directly is that on the position(paste0('carb')) is a dynamic variable like this paste0('temp', n) and n is a series of numbers in my real situation.


library(dplyr)
sumay1 <- mtcars %>% group_by(cyl) %>% 
  summarise(!!paste0('carb', 100) := mean(paste0('carb'), na.rm = T))

sumay2 <- mtcars %>% group_by(cyl) %>% 
  summarise(!!paste0('carb', 100) := mean(sym('carb'), na.rm = T))

sumay3 <- mtcars %>% group_by(cyl) %>% 
  summarise(!!paste0('carb', 100) := mean({{paste0('carb')}}, na.rm = T))

评论
  • psed
    psed 回复

    In the second case, we need to evaluate (!!) the symbol

    library(dplyr)
    mtcars %>% 
       group_by(cyl) %>% 
       summarise(!!paste0('carb', 100) := mean(!!sym('carb'), na.rm = TRUE))
    # A tibble: 3 x 2
    #    cyl carb100
    #* <dbl>   <dbl>
    #1     4    1.55
    #2     6    3.43
    #3     8    3.5 
    

    The {{}} is mainly used within a function where we pass unquoted arguments and it is equivalent to enquo + !!