r - 如何获得多个变量的连续排名

标签 r rank

我有一个数据集,其中有 5 个品种 (var) 和 3 个变量 (x,y,z) 可用。我需要对这些品种的 3 个变量进行排名。当排名相同时,在开始下一个排名之前会显示差距。我无法获得连续排名。这是我的数据

 x<-c(3,3,4,5,5)
 y<-c(5,6,4,4,5)
 z<-c(2,3,4,3,5)
 df<-cbind(x,y,z)
 rownames(df) <- paste0("G", 1:nrow(df))
 df <- data.frame(var = row.names(df), df)

我尝试了以下代码来获得结果

res <- sapply(df, rank,ties.method='min')
res

     var x y z
[1,]   1 1 3 1
[2,]   2 1 5 2
[3,]   3 3 1 4
[4,]   4 4 1 2
[5,]   5 4 3 5

我得到的 x 变量的等级为 1 1 3 4 4 而不是 1 1 2 3 3。对于 y 和 z 发现了相同的结果。

我想要的结果是

 >res
     var x y z
[1,]   1 1 2 1
[2,]   2 1 3 2
[3,]   3 2 1 3
[4,]   4 3 1 2
[5,]   5 3 2 4

如果有人帮助我,我将不胜感激。

最佳答案

嗯,一个简单的方法是转换为因子,然后转换为整数

df[] <- lapply(df, function(x) as.integer(factor(x)))
df
#   var x y z
#G1   1 1 2 1
#G2   2 1 3 2
#G3   3 2 1 3
#G4   4 3 1 2
#G5   5 3 2 4

关于r - 如何获得多个变量的连续排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56770208/

相关文章:

r - 从R中的数据表制作直方图

r - 在 R 中检测具有多个观察值的行

mysql - MySQL 中的 ROW_NUMBER()

c# - Google页面排名检查Asp.Net脚本

sql - 在 ORACLE SQL 中仅选择 MIN 值

r - 如何将 sf 导入到包中以运行依赖于 lwgeom 的函数?

r - ggplot散点图中的图例问题

r - 对列表中的数据框迭代函数,找到匹配项

mysql - MySql 中的排名逻辑问题

图中的 R 等级点