tl; dr: df %>% arrange(desc(!!sym("b")))
Прежде всего, устарели стандартные вычисления dplyr
глаголов, поэтому вместо:
library(dplyr)
x <- "b"
df %>% arrange_(x)
теперь рекомендуется ввести:
library(dplyr)
library(rlang)
df %>% arrange(!!sym(x))
См. ?arrange_
, он ссылается на раздел справки Deprecated SE versions of main verbs.
и предлагает некоторые подробности.
Отсюда для сортировки по убыванию легко адаптировать новую формулировку:
df %>% arrange(desc(!!sym(x)))
Они также работают, если ваши данные не сгруппированы:
df %>% arrange(desc(.[[x]]))
df %>% arrange(desc(.data[[x]]))
К вашему сведению, чтобы заставить его работать с arrange_
, мы могли бы сделать следующее, однако лучше использовать подход, описанный выше!
df %>% arrange_(paste0("desc(",x,")"))
Что можно упростить, если у нас есть числовые переменные, как в примере OP:
df %>% arrange_(paste0("-",x))
Или используя lazyeval::interp
df %>% arrange_(interp(~desc(y),y=as.name(x)))
Или, как предлагает @ shyam-sali:
desc_ <- function(x) lazyeval::interp(~desc(var), var = as.name(x))
# or just
# desc_ <- function(x) paste0("desc(",x,")")
df %>% arrange_(desc_(x))
person
Moody_Mudskipper
schedule
23.02.2018
df %>% dplyr::arrange(dplyr::desc(df["b"]))
? Честно говоря, я не уверен ... - person KFB   schedule 20.11.2014df <- data.frame(a = 3:1, b = 1:3)
; Переменная для сортировки в виде строки:sort_var <- "b"
; Затем воспользуйтесь примером из виньетки, на которую я ссылался:df %>% arrange_(interp(~desc(var), var = as.name(sort_var)))
Также убедитесь, что вы сначала установили и загрузили пакетlazyeval
. - person talat   schedule 22.11.2014desc_ <- function(x) { lazyeval::interp(~desc(var), var = as.name(x)) }
хороша - person saladi   schedule 13.04.2017