如何在R函数中将变量传递给过滤器函数

时间:2019-03-18 10:36:25

标签: r function dplyr

我对R相当陌生。我编写了以下函数,该函数试图基于特征变量(作为“变量”传递给函数)和目标变量(作为{{1传递给函数}}。我还传递了一个值(Can't resolve all parameters for Service in /path/to/file: (?, [object Object]). This will become an error in Angular v6.x)进行过滤。

以下功能属于过滤器行(target_var)。我认为这与target_valfilter(target_var == target_val)等有关,但无法解决。以下代码应已准备就绪,可以运行-如果您排除过滤器行,那么它应该可以工作;如果您包括过滤器行,它将会掉下来。

quo

1 个答案:

答案 0 :(得分:1)

所以我假设您要按目标好坏来进行过滤。 据我了解,请始终filter()之前group_by(),因为您可能会省略过滤器变量。我对您的功能进行了一些重组:

    dset <- data.frame(target, var_1)
odds_by_var <- function(dataframe, variable, target_var, target_val){

  df_name <- paste('odds', deparse(substitute(variable)), sep = "_")
  variable_string <- deparse(substitute(variable))
  target_string <- deparse(substitute(target_var))

  temp_df1 <- dataframe %>%
    group_by_(variable_string, target_string) %>%
    summarise(cnt = n()) %>%
    mutate(total = sum(cnt),
           rate = cnt / total) 
names(temp_df1) <- c(variable_string,"target","cnt","total","rate" )
temp_df1 <- temp_df1[temp_df1$target == target_val,]
  assign( df_name,temp_df1, envir=.GlobalEnv)

}

odds_by_var(dset, var_1, target, "bad")

结果:

> odds_var_1
# A tibble: 2 x 5
# Groups:   var_1 [2]
  var_1       target   cnt total  rate
  <chr>       <chr>  <int> <int> <dbl>
1 debit_order bad        1     4  0.25
2 other       bad        1     2  0.5