在 dplyr 中使用用户定义函数中的特定列来汇总函数

Use a specific column inside the user defined function for summarize function in dplyr

我有以下问题。我有一个数据集 mtcars 我想写一个函数来总结给定的变量,例如mpg 假定另一个变量具有特定值,例如对=1。我提供了一个代码,我想在其中总结 mpg 给定 vs = 1 并再次总结给定 am = 1.

Error in NextMethod("[") : object 'vs' not found

f_1 <- function(data, var){
  
  # Quote the variable that we can use it's name
  var         <- enquo(var)
  
  data %>%
    summarize(p_1          = mean(!!var[vs  == 1], na.rm = TRUE),
              p_2          = mean(!!var[am  == 1], na.rm = TRUE))
}


f_1(data = mtcars, var = mpg)

你可以使用卷曲 ({{..}}) :

library(dplyr)

f_1 <- function(data, var){
  data %>%
    summarize(p_1 = mean({{var}}[vs  == 1], na.rm = TRUE),
              p_2 = mean({{var}}[am  == 1], na.rm = TRUE))
}

f_1(data = mtcars, var = mpg)

#      p_1      p_2
#1 24.55714 24.39231