r - dplyr:在 NSE 中按位置排列列
问题描述
我想dplyr::arrange
根据特定列中的值对数据框的行进行排序。我想根据位置而不是列名来选择列,因为列名会因输入而异。我已尝试调整dplyr::select
此处找到的建议(dplyr: select columns by position in NSE),但我的代码只返回原始数据框而没有任何更改。这是我的数据框和我用来对其进行排序的代码:
df <- structure(list(D7_ctrl_v_D6_ctrl_deg = structure(c(1L, 2L, 3L,
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("down", "unchanged",
"up"), class = "factor"), D7_OE_v_D7_ctrl_deg = structure(c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L,
3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("down", "unchanged",
"up"), class = "factor"), D7_OE_v_D6_ctrl_deg = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("down", "unchanged",
"up"), class = "factor"), Freq = c(584L, 1841L, 375L, 636L, 331L,
0L, 44L, 0L, 0L, 0L, 420L, 600L, 208L, 9164L, 280L, 391L, 410L,
0L, 0L, 0L, 69L, 0L, 448L, 746L, 297L, 2362L, 715L)), class = "data.frame", row.names = c(NA,
-27L))
## these all fail
df %>% dplyr::arrange(1)
df %>% dplyr::arrange(c(1))
df %>% dplyr::arrange(!!"1")
df %>% dplyr::arrange(!!c(1))
我猜这种差异与data-masking
used byarrange
和tidy-select
used by之间的差异有关select
,但我不知道是否有办法按arrange
. 任何建议,将不胜感激。谢谢。
解决方案
使用 dplyr >v1.0,您可以使用across()
按索引指定列。你可以做
df %>% dplyr::arrange(across(1))
推荐阅读
- javascript - 使用 Scrapy 从 Business Insider 网络抓取股票详细信息
- java - 根据子节点数确定二叉树中的节点数
- facebook-graph-api - 获取 Facebook 用户 ID 还不是我的应用程序的用户?
- postgresql - JSONB 到 Postgres 中的表格
- swift - Swift OperationQueue 开始下一个操作的时间
- javascript - 有没有办法让 babel 嵌入@babel/runtime?
- mysql - 解释 MySQL 连接性能
- drools - kie-dmn-signavio-7.37.0.Final - 无法执行包含多实例决策和 zip 函数的 DMN 决策模型
- javascript - 将java脚本数组导出到excel时遇到问题
- javascript - 关闭手动触发的 Bootstrap 4 Popper.js 工具提示