如何在 R 中反转排名数据框?

问题描述 投票:0回答:2

我怎样才能反转这个data.frame:

df = data.frame(A = c(1, 3, 2, NA, NA),
                B = c(1, 4, 3, 2, NA),
                C = c(1, 3, 4, 5, 2))

得到如下倒置数据框:

df.inv = data.frame(A = c(3, 1, 2, NA, NA),
                    B = c(4, 1, 2, 3, NA),
                    C = c(5, 3, 2, 1, 4))

在 R 中有没有简单的方法来做到这一点?

r dataframe ranking
2个回答
3
投票

我们可以循环

across
列应用
rank
倒置的有符号值

library(dplyr)
df %>%
   mutate(across(everything(), ~ rank(-.x, na.last = "keep")))

-输出

   A  B C
1  3  4 5
2  1  1 3
3  2  2 2
4 NA  3 1
5 NA NA 4

2
投票

我正在从@akrun 窃取

rank()
方法,但不那么“整洁”:

list2DF(lapply(-df, rank, na.last="keep"))

    A  B C
 1  3  4 5
 2  1  1 3
 3  2  2 2
 4 NA  3 1
 5 NA NA 4
© www.soinside.com 2019 - 2024. All rights reserved.