假设我们有一个如下所示的tibble
。理论上,第一列只是一个 rownames
,它必须与列名称一对一对应。
例如,排除第一列(row_name
),左起第三列名为G
,但对应的行为E
.
我想知道如何重新排序行(例如,将标题为 G
的行向上两行显示)以便行和列匹配?
out <- tibble(row_name=factor(c("A","B","E","F","G")),`A`=as.character(1:5),`B`=as.character(c(2,NA,0:2)),
`G`=as.character(4:8),`E`=as.character(4:8),`F`=as.character(4:8))
# row_name A B G E F
# <fct> <chr> <chr> <chr> <chr> <chr>
#1 A 1 2 4 4 4
#2 B 2 NA 5 5 5
#3 E 3 0 6 6 6
#4 F 4 1 7 7 7
#5 G 5 2 8 8 8
# EXPECTED OUTPUT:
# row_name A B G E F
# <fct> <chr> <chr> <chr> <chr> <chr>
#1 A 1 2 4 4 4
#2 B 2 NA 5 5 5
#5 G 5 2 8 8 8
#3 E 3 0 6 6 6
#4 F 4 1 7 7 7
最佳答案
如果我们想对行重新排序,请在slice
中使用match
library(dplyr)
out %>%
slice(match(names(.)[-1], row_name))
-输出
# A tibble: 5 x 6
row_name A B G E F
<fct> <chr> <chr> <chr> <chr> <chr>
1 A 1 2 4 4 4
2 B 2 <NA> 5 5 5
3 G 5 2 8 8 8
4 E 3 0 6 6 6
5 F 4 1 7 7 7
或者在排列
内
out %>%
arrange(factor(row_name, levels = names(.)[-1]))
-输出
# A tibble: 5 x 6
row_name A B G E F
<fct> <chr> <chr> <chr> <chr> <chr>
1 A 1 2 4 4 4
2 B 2 <NA> 5 5 5
3 G 5 2 8 8 8
4 E 3 0 6 6 6
5 F 4 1 7 7 7
关于重新排序对称小标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68910894/