【发布时间】:2014-11-20 08:10:20
【问题描述】:
如何使用dplyr::arrange(dplyr::desc()) 并传入一个字符串作为列名?
这是一个示例数据集:
df <- data.frame(a = 1:3, b = 3:1)
有效的例子:
df %>% dplyr::arrange(b)
df %>% dplyr::arrange_("b")
df %>% dplyr::arrange(dplyr::desc(b))
但我似乎不能同时使用 arrange 和 desc 的字符串,这是我尝试过的两个版本都不起作用:
df %>% dplyr::arrange(dplyr::desc("b"))
df %>% dplyr::arrange_(dplyr::desc("b"))
谢谢!
【问题讨论】:
-
可能是这样的
df %>% dplyr::arrange(dplyr::desc(df["b"]))?坦率地说,我不确定...... -
你需要使用 interp
-
感谢提示和欺骗发现,但我仍然不知道如何使用 interp(来自lazyeval 包?)来使这个简单的示例工作。我将继续尝试了解 NSE,但如果您也可以发布解决方案,如果它不会花费您太多时间,那就太棒了。还是非常感谢
-
引用 Henrik 对我已删除答案的评论:“
df <- data.frame(a = 3:1, b = 1:3);作为字符串排序的变量:sort_var <- "b";然后使用我提到的小插图中的示例:df %>% arrange_(interp(~desc(var), var = as.name(sort_var)))”还要确保首先安装并加载包lazyeval。 -
一个新的便利功能
desc_ <- function(x) { lazyeval::interp(~desc(var), var = as.name(x)) }很好