用 R 对一行的元素和矩阵的列的元素进行排序

Rank A Elements of A Row and Also Elements A Column of A Matrix With R

x <- cbind(a=c(11,22,44,15),
           b=c(21,12,22,19),
           c=c(35,66,12,20))
rownames(x) <- c('p', 'q', 'r', 's')
XX <- cbind(rbind(x, MIN = apply(x, 2, min)), MIN = c(apply(x, 1, min), NA))
xx

#      a  b  c  MIN
# p   11 21 35  11
# q   22 12 66  12
# r   44 22 12  12
# s   15 19 20  15
# MIN 11 12 12  NA

我想知道在 row MINcolumn MIN 中哪个元素排名最低,次之,然后是最高值,就像这样:

#      a   b   c  MIN  RANK
# p    11  21  35  11  1
# q    22  12  66  12  2.5
# r    44  22  12  12  2.5
# s    15  19  20  15  4
# MIN  11  12  12  NA  NA
# RANK 1   2.5 2.5 NA  NA

是这样的吗?

library(tidyverse)

x <- cbind(a=c(11,22,44,15),
           b=c(21,12,22,19),
           c=c(35,66,12,20))
rownames(x) <- c('p', 'q', 'r', 's')
XX <- cbind(rbind(x, MIN = apply(x, 2, min)), MIN = c(apply(x, 1, min), NA))

XX |> 
  as_tibble(rownames = 'row_names') |> 
  mutate(rank = rank(MIN,na.last = 'keep'))
#> # A tibble: 5 x 6
#>   row_names     a     b     c   MIN  rank
#>   <chr>     <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 p            11    21    35    11   1  
#> 2 q            22    12    66    12   2.5
#> 3 r            44    22    12    12   2.5
#> 4 s            15    19    20    15   4  
#> 5 MIN          11    12    12    NA  NA

reprex package (v2.0.0)

于 2021-08-06 创建

我们可以根据 row/column 名称或索引提取元素,得到 rank 并使用 rbind/cbind 添加另一个 row/column

newrow <- c(rank(XX['MIN', c('a', 'b', 'c')]), MIN = NA)
newcol <- c(rank(XX[1:(nrow(XX)-1), 'MIN']), NA, NA)
cbind(rbind(XX, RANK = newrow), RANK = newcol)

-输出

      a    b    c MIN RANK
p    11 21.0 35.0  11  1.0
q    22 12.0 66.0  12  2.5
r    44 22.0 12.0  12  2.5
s    15 19.0 20.0  15  4.0
MIN  11 12.0 12.0  NA   NA
RANK  1  2.5  2.5  NA   NA