首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用dplyr::安排(desc())时使用字符串作为列名?

如何使用dplyr::安排(desc())时使用字符串作为列名?
EN

Stack Overflow用户
提问于 2014-11-20 08:10:20
回答 1查看 4.5K关注 0票数 16

如何使用dplyr::arrange(dplyr::desc())并将字符串作为列名传递?

下面是一个示例数据集:

代码语言:javascript
复制
df <- data.frame(a = 1:3, b = 3:1)

有效的例子:

代码语言:javascript
复制
df %>% dplyr::arrange(b)
df %>% dplyr::arrange_("b")
df %>% dplyr::arrange(dplyr::desc(b))

但是,我似乎不能在arrangedesc中使用字符串,这是我尝试过的两个不起作用的版本:

代码语言:javascript
复制
df %>% dplyr::arrange(dplyr::desc("b"))
df %>% dplyr::arrange_(dplyr::desc("b"))

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-02-23 11:08:24

tl;dr : df %>% arrange(desc(!!sym("b")))

首先,不推荐使用dplyr动词的标准计算值,所以不要:

代码语言:javascript
复制
library(dplyr)
x <- "b"
df %>% arrange_(x)

现在建议键入:

代码语言:javascript
复制
library(dplyr)
library(rlang)
df %>% arrange(!!sym(x))

参见?arrange_,它链接到一个名为Deprecated SE versions of main verbs.的帮助主题,并提供了一些详细信息。

从那里到降序排序,调整新的公式是很简单的:

代码语言:javascript
复制
df %>% arrange(desc(!!sym(x)))

如果没有将数据分组,这些工作也是一样的:

代码语言:javascript
复制
df %>% arrange(desc(.[[x]]))
df %>% arrange(desc(.data[[x]]))

FYI,为了使它与arrange_一起工作,我们可以做以下工作,但是最好使用上面的方法!

代码语言:javascript
复制
df %>% arrange_(paste0("desc(",x,")"))

如果我们有数值变量(如OP示例中的),则可以将其简化:

代码语言:javascript
复制
df %>% arrange_(paste0("-",x))

或者使用lazyeval::interp

代码语言:javascript
复制
df %>% arrange_(interp(~desc(y),y=as.name(x)))

或者像@saladi提议的那样:

代码语言:javascript
复制
desc_ <- function(x) lazyeval::interp(~desc(var), var = as.name(x))
# or just
# desc_ <- function(x) paste0("desc(",x,")")
df %>% arrange_(desc_(x))
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27034655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档