Я довольно новичок в R. Я написал нижеприведенную функцию, которая пытается суммировать фрейм данных на основе переменной признака (переданной функции как «переменная») и целевой переменной (переданной функции как target_var
). Я также передаю ему значение (target_val
) для фильтрации.
Приведенная ниже функция переключается на линию фильтра (filter(target_var == target_val)
). Я думаю, что это как-то связано с quo
, quosure
и т. Д., Но не могу понять, как это исправить. Следующий код должен быть готов к запуску - если вы исключите строку фильтра, она должна работать, если вы включили строку фильтра, она упадет.
library(dplyr)
target <- c('good', 'good', 'bad', 'good', 'good', 'bad')
var_1 <- c('debit_order', 'other', 'other', 'debit_order','debit_order','debit_order')
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()) %>%
group_by_(variable_string) %>%
mutate(total = sum(cnt)) %>%
mutate(rate = cnt / total) %>%
filter(target_var == target_val)
assign(df_name, temp_df1, envir=.GlobalEnv)
}
odds_by_var(dset, var_1, target, 'bad')