当前位置: 首页 > 知识库问答 >
问题:

使用 dplyr 的正确方法::按列动态排序排列

袁卓
2023-03-14

我试图弄清楚如何使用tidyverse来动态排列数据帧。我以前用arrange_但是现在不推荐用了。

一些更详细的细节。我需要安排数字,如果不是,则升序。我有内置的逻辑,但我不知道如何让它与安排一起工作。

一些数据:

library(tidyverse)
dat <- tibble(`Project ID` = c(rep("Project A", 3), rep("Project B", 3), rep("Project C", 3)),
                  `Summary Col numeric` = c(50, 50, 20, 500, 500, 200, 3000, 1000, 3000),
                  `Summary Col alpha` = c("A", "B", "C", "A", "B", "C", "A", "B", "C"))

某些代码:

# set the sort order. Should work either way
sortOrder = c("Summary Col alpha", "Summary Col numeric")


# Problem 1. doesn't work with spaces in names (not essential to fix as 
# I can work around with gsub)

names(dat) <- gsub(" ", "_", names(dat))
sortOrder = gsub(" ", "_", sortOrder)

# get the sort correct - numeric is descending, character is ascending
# figure out numeric cols and paste desc
numericSorts <- sapply(dat[sortOrder], is.numeric) 
sortOrder[numericSorts] <- paste0("desc(",sortOrder[numericSorts], ")")


  # Problem 2 - deprecated solution. Essential to fix
  dat %>% 
  dplyr::arrange_(.dots = sortOrder)  

有人有使用tidyverse的解决方案吗?

谢谢

共有1个答案

任飞龙
2023-03-14

也许你可以使用这篇文章中提出的解决方案。我们需要使用来自< code>rlang的两个表达式,并通过< code >执行这段代码!!:

dat %>% dplyr::arrange(!!rlang::parse_expr(sortOrder[1]),
                       !!rlang::parse_expr(sortOrder[2]))

编辑1这将解决您的问题:

dplyr::arrange(!!!rlang::parse_exprs(sortOrder))

找到他们的。

 类似资料:
  • 我正在生成1和0的数据帧,如下所示: 由reprex软件包(v0.1.1.9000)于2018-01-08创建。 我需要按变量的总和升序排列,然后按每个变量的降序排列。使用相当简单。然而,我想有一个更稳健的安排方法。例如,如果更改为,那么最后一行也必须更改为。我尝试使用整齐的选择器进行排列,就像使用函数一样,但出现以下错误: 由reprex软件包(v0.1.1.9000)于2018-01-08创建

  • 我有一个sql查询 所以我显然想按价格从高到低来订购。然而,它似乎是取第一个数字并按其排序。我的理论是,它将它视为字符串,由于列是varchar,这是有意义的。然而,这是第三方数据,所以我被它卡住了。我怎样才能订购,使较大的数字在前? 这是一个如何排序的例子

  • 我有以下数据框架(这里是样本): 我想按时间戳列排列,但我收到以下错误: arrange_impl错误(。data,dots):参数1是不支持的矩阵类型 请建议如何使其工作。我知道时间戳是一个函数和矩阵,但这里它是一个列,我“希望”“理解”它是一列。 正如@sotos所问:

  • 我有一个针对Oracle数据库的规范top-N查询,这是所有常见问题解答和Howto建议的: 它在Oracle 11上运行良好,即它按内部选择中指定的顺序返回前N个记录。 然而,它在Oracle 12上中断。它仍然返回相同的前N个记录,但它们可能会被洗牌。这些记录的最终顺序是不确定的。 我在谷歌上搜索了一下,但没有找到任何相关的讨论。看起来其他人总是从这样的选择中获得正确的记录顺序。 不过有一个发

  • 我用的是拉威尔的背包,积垢舱。 如何将orderby()用于多列? 例子: 我看到src和orderby只接受一个参数。 有什么建议吗?

  • 问题内容: 这是场景: 想象一下,注册用户使用创建了一个新实体,而其他注册用户创建了一个新实体,依此类推… 我想要做的是根据记录价格对记录进行排序,具体取决于前端用户选择的货币(欧元或美元)。 我无法编制索引,例如或,因为费率每小时都会变化,但是如果可能的话,更新10000条记录价格的最佳方法是什么? 1-以下是我的建议,它可行,但是我认为这可能是更好的方法,有什么建议吗? 2-如果没有,哪种性能