我有一个近 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))
Run Code Online (Sandbox Code Playgroud)
我想对数据框单元格的值进行排序
预期产出
df= data.frame(a=c(1,1,2,1,1),
b=c(2,2,1,NA,2),
c=c(NA,NA,NA,NA,1))
Run Code Online (Sandbox Code Playgroud)
我们可以使用pmap循环遍历每一行(与 相比会更快rowwise)并应用dense_rank
library(purrr)
library(dplyr)
df %>%
pmap_dfr(~ setNames(dense_rank(-c(...)), names(c(...))))
Run Code Online (Sandbox Code Playgroud)
-输出
# 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
Run Code Online (Sandbox Code Playgroud)
或者更快的选项可能是使用dapplyfromcollapse
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
Run Code Online (Sandbox Code Playgroud)