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

标签 r dplyr tidyr

我有一个包含近 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

关于r - 如何按 r 中数据框中的行对数字数据进行排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69257791/

相关文章:

linux - 使用 R/awk 打印文件中列的标准差

使用 tcltk2 库在 R 中通过 DDE 检索数据

替换单元格值,匹配列表元素并切换对

r - dplyr 根据具有不同后缀的其他列进行变异

r - 我怎样才能在 dplyr 中进行变异而不丢失顺序?

r - R 中 plyr::ldply(tapply) 的 dplyr 等价物是什么?

r - tidy() 工作但 glance() 和 augment() 在回归模型中不起作用

r - 为什么线性拟合的结果在 R 和 Excel(Gnumeric Spreadsheet 和 WPS)中具有相同的小数据?

r - 使用 dygraph 显示第二个 Y 轴

r - 无法将 "gather"输出的列名称更改为默认名称以外的任何名称