dplyr передача переменных в функцию для динамического размещения столбцов - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь динамически упорядочить фрейм данных, передавая сначала список переменных для использования в порядке возрастания, и одну переменную в порядке убывания (последний в порядке упорядочения). каждая итерация выбирает верхние строки и сохраняет другой фрейм данных. Приведенный ниже пример работает, когда передается только одна нисходящая переменная, но я не смог заставить ее работать со списком переменных.

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...