根据数据帧的两个变量进行排名

时间:2020-04-09 11:04:35

标签: r

我有一个带有var1,var2变量的数据框。基于var2(从最高到最低),如果var2具有相同的值,我必须分配一个等级,我们必须考虑var1(从最高到最低)的对应值来给出等级,并且该等级应排序。谁能建议我在R中的表现。

var1   var2   rank
 234   1456      1
  24    456      3 
  34    456      2
  68    343      4

4 个答案:

答案 0 :(得分:1)

您可以使用frank中的library(data.table)。使用frank,您可以在变量名称前使用-来指定降序。

frank(dt, -var2, -var1)

数据:

dt = fread("var1, var2, rank
    234, 1456, 1
    24, 456 , 3
    34, 456 , 2
    68, 343 , 4")

答案 1 :(得分:1)

一种实现方法是通过两个变量对它进行排序,然后将1到序列的序号分配给rank列

    df <- data.frame(var1 = c(234,24,34,68), var2 = c(1456,456,456,343), rank = NA)

    df <- df[order(df$var2, df$var1, decreasing = TRUE),]
    df$rank <- seq(1:nrow(df))

我更喜欢dww的方法,因为您可以直接为每个变量指定排序顺序。就我而言,您无法使用order()做到这一点

答案 2 :(得分:0)

这是类似于@ReelSaemon的答案的基本方法,但是我让数据保持其原始顺序。

YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. 

答案 3 :(得分:0)

或者在base R中,我们可以将rankties.method一起使用

with(df, rank(-var2, -var1, ties.method = 'last'))