I am trying to use arrange_()
with string input and in one of the columns in descending order.
library(dplyr) # R version 3.3.0 (2016-05-03) , d
We can paste
'desc' as a string to evaluate it.
myCol1 <- paste0("desc(", "x)")
df1 %>%
arrange_(.dots = c("grp", myCol1))
# grp x
#1 1 6.16
#2 1 3.39
#3 1 2.82
#4 2 9.17
#5 2 4.35
Or with 'myCol'
df1 %>%
arrange_(.dots = c("grp", paste0("desc(", myCol, ")")))
Or use lazyeval
library(lazyeval)
df1 %>%
arrange_(.dots = c("grp", interp(~ desc(n1), n1 = as.name(myCol))))
# grp x
#1 1 6.16
#2 1 3.39
#3 1 2.82
#4 2 9.17
#5 2 4.35
By using "desc(myCol)"
, it is a single string and the value of the 'myCol' is not evaluated.
Or another option is parse_expr
(from rlang
) and evaluate with !!
df1 %>%
arrange(grp, !! rlang::parse_expr(myCol1))
#grp x
#1 1 6.16
#2 1 3.39
#3 1 2.82
#4 2 9.17
#5 2 4.35
Or using the original string in the OP's post. Convert the string to symbol (sym
), evaluate (!!
) and arrange it in descending (desc
) order
myCol <- "x"
df1 %>%
arrange(grp, desc(!! rlang::sym(myCol)))
# grp x
#1 1 6.16
#2 1 3.39
#3 1 2.82
#4 2 9.17
#5 2 4.35