如何使用dplyr的安排进行标准评估?

时间:2019-10-28 23:25:47

标签: r dplyr

dplyr的arrange不适用于!!

请参阅MWE,我试图在其中按“日期”变量对data.frame进行排序,但我不想使用date来使用字符/字符串对其进行参数化

library(dplyr)

a = data.frame(date = 1:3, ok = 1:3)

a %>% 
  arrange(date)

date = "date"
a %>% 
  arrange(!!date) # doesn't work


meh = "date"
a %>% 
  arrange(!!meh) # doesn't work

我认为!!可以在任何dplyr函数中用于执行变量的标准评估(SE)。理解不正确吗?我该如何纠正?

3 个答案:

答案 0 :(得分:2)

我不知道为什么!!不能与ranging一起使用,但是您仍然可以使用get

a %>% arrange(get(meh))


#  date ok
#1    1  1
#2    2  2
#3    3  3

答案 1 :(得分:1)

一种方法(似乎有点round回,但仍然可行)是在应用取消引号运算符之前使用rlang::sym

library(dplyr)

a = data.frame(date = 3:1, ok = 1:3)

a %>% 
  arrange(date)

acol = "date"
a %>% 
  arrange(!!rlang::sym(acol))

这里也有详尽的指南:dplyr programming guide

另请参阅this answer;基本上是同一件事。

通过Diceboy的有用评论

编辑 TIL,有许多方法可以处理多个变量:

a %>% arrange(get(name1),get(name2))
a %>% arrange(.data[[name1,name2]])
a %>% arrange(!!!rlang::syms(c(name1,name2)))

尽管mget不能很好地工作!

答案 2 :(得分:1)

使用3 2 1变量:

TextAdapter

还有更多示例:

IParcelable gridViewState = gvContagem.OnSaveInstanceState(); // <-- save scroll position
gvContagem.Adapter = new TextAdapter(this, artigos);
gvContagem.OnRestoreInstanceState(gridViewState); // <-- Load scroll position