Я пытаюсь динамически упорядочить фрейм данных, передавая сначала список переменных для использования в порядке возрастания, и одну переменную в порядке убывания (последний в порядке упорядочения). каждая итерация выбирает верхние строки и сохраняет другой фрейм данных. Приведенный ниже пример работает, когда передается только одна нисходящая переменная, но я не смог заставить ее работать со списком переменных.
top_n_order <- function(df,n, expr_var, ... ){
expr_var <- enquo(expr_var)
dots <- list(...)
expr_order <- enquos(...)
if (!is_empty(dots)){
arrange_call <- lazyeval::interp(~ list(x,desc(y)), x=expr_order, y=expr_var)
selected_df <- df %>%
arrange_(.dots = list(arrange_call)) %>%
rownames_to_column("model_name") %>%
select(mpg, cyl, !! expr_var) %>%
head(n)
selected_df
}else{
selected_df <- df %>%
arrange(desc(!! expr_var)) %>%
rownames_to_column("model_name") %>%
select(model_name, mpg,cyl, !! expr_var) %>%
head(n)
selected_df
}
}
v_cols <- colnames(mtcars)
cars_top_df <- data.frame()
top_n_order(mtcars, 5, as.name(v_cols[3]) ) ##Works
for(i in 1:length(v_cols)){
v_order <- lapply(as.list(v_cols[-i]), as.name)
tmp_selected <- top_n_order(mtcars, 5, as.name(v_cols[i]), v_order )
cars_top_df <- bind_rows(cars_top_df,tmp_selected)
}
cars_top_df %>%
arrange(model_name)