【问题标题】:Re-ordering a symmetric tibble重新排序对称的小标题
【发布时间】:2021-10-24 21:12:47
【问题描述】:

假设我们有一个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   

【问题讨论】:

    标签: r function dplyr tidyverse tibble


    【解决方案1】:

    如果我们想对行重新排序,请在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  
    

    或在arrange

    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   
    

    【讨论】:

    • 然后将 ends_with 替换为 1 或 `just use row_name.x
    • HERE 是我根据您的要求提出的问题。
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2019-01-26
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多