r - 如何按 r 中数据框中的行对数字数据进行排名?

我有一个包含近 5000 列的数据框。这是数据框的片段

df= data.frame(a=c(13,17,19,7,9),
           b=c(1,3,50,NA,3),
           c=c(NA,NA,NA,NA,9))

我想对数据框单元格的值进行排序 w.r.t.行数

预期输出

df= data.frame(a=c(1,1,2,1,1),
               b=c(2,2,1,NA,2),
               c=c(NA,NA,NA,NA,1))

最佳答案

我们可以使用 pmap 遍历每一行(与 rowwise 相比会更快)并应用 dense_rank

library(purrr)
library(dplyr)
df %>% 
    pmap_dfr(~ setNames(dense_rank(-c(...)), names(c(...))))

-输出

# A tibble: 5 x 3
      a     b     c
  <int> <int> <int>
1     1     2    NA
2     1     2    NA
3     2     1    NA
4     1    NA    NA
5     1     2     1

或者更快的选择可能是使用 collapse

中的 dapply
library(collapse)
library(data.table)
dapply(df, MARGIN = 1, FUN = frank, ties.method = 'dense', na.last = "keep")
  a  b  c
1 2  1 NA
2 2  1 NA
3 1  2 NA
4 1 NA NA
5 2  1  2

https://stackoverflow.com/questions/69257791/

相关文章:

amazon-web-services - Github 工作流 CI/CD 失败

java - 减去天数而不影响时间

c# - 从 C# 中的 JSON 字符串中获取特定值

xamarin - 无法再在模拟器或设备上调试

sql - 将计数设置为变量

c# - 如何将 ViewData 传递给类中的 Action 方法?

python - 将函数重新定义为自身的一部分——为什么非法?

reactjs - 我想在按下 react esc 时关闭模态

c++ - 默认参数与重载?

visual-studio-code - 2FA 与 VS 代码远程 SSH?