重新排序 tibble 中的一行 - 将其移至最后一行

Reorder one row in tibble - move it to the last row

如何重新排列 tibble 中的行?

我希望对行重新排序,以便:x = "c" 的行转到小标题的底部,其他所有内容保持不变。

library(dplyr)

tbl <- tibble(x = c("a", "b", "c", "d", "e", "f", "g", "h"),
              y = 1:8)
tbl |> dplyr::arrange(x == "c")

dplyr::arrange() 的替代方法,使用基数 R:

tbl[order(tbl$x == "c"), ] # Thanks to Merijn van Tilborg

输出:

#   x         y
#   <chr> <int>
# 1 a         1
# 2 b         2
# 3 d         4
# 4 e         5
# 5 f         6
# 6 g         7
# 7 h         8
# 8 c         3

使用 forcats,转换为具有最后一个 c 的因子,然后是 arrange。这不会更改列 x.

的 class
library(forcats)

tbl %>% 
  arrange(fct_relevel(x, "c", after = Inf))
  
# # A tibble: 8 x 2
#   x         y
#   <chr> <int>
# 1 a         1
# 2 b         2
# 3 d         4
# 4 e         5
# 5 f         6
# 6 g         7
# 7 h         8
# 8 c         3

如果 x 的顺序很重要,最好将其保留为因子 class,下面将把 class 从字符更改为因子最后是 c

tbl %>% 
  mutate(x = fct_relevel(x, "c", after = Inf)) %>% 
  arrange(x)