我怎样才能反转这个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 中有没有简单的方法来做到这一点?
我们可以循环
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
我正在从@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