【发布时间】:2021-05-26 00:02:06
【问题描述】:
我想使用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))
我猜这种差异与arrange 使用的data-masking 和select 使用的tidy-select 之间的差异有关,但我不知道是否有办法选择列按arrange 中的位置。任何建议,将不胜感激。谢谢。
【问题讨论】: