拉取作为函数参数的列

Pull a column given as argument in function

我有一个接受数据集和变量作为参数的函数。它需要根据某些条件进行过滤,将名称为变量的列拉出来,然后计算其平均值。不过,我无法将变量作为列名传递。请帮忙。

MeanFor <- formula(df, flag, var){
  df2 <- df %>% filter(member == flag) %>% pull(var) %>% mean(.)
}

我的df是这样的

df <- data.frame(name = c("A","B","C","D"),
member = c("Y","Y","Y","N"), sales_jan = c("100","0","130","45"), sales_feb = c("44","0","67","0"))

我可以提供标志为“Y”/“N”,并希望提供“sales_jan”/“sales_feb”/.../“sales_dec”作为可变输入。

您可以将函数写成:

library(dplyr)

MeanFor <- function(df, flag, var){
   df %>% filter(member == flag) %>% pull(.data[[var]]) %>% as.numeric() %>% mean
}
df %>% MeanFor('Y', 'sales_jan')
#[1] 76.66667

df %>% MeanFor('Y', 'sales_feb')
#[1] 37

该函数可以用 base R 编写为:

MeanFor <- function(df, flag, var){
    mean(as.numeric(subset(df, member == flag)[[var]]))
}