用 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 MIN
和 column 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
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 MIN
和 column 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