我有一个带有var1,var2变量的数据框。基于var2(从最高到最低),如果var2具有相同的值,我必须分配一个等级,我们必须考虑var1(从最高到最低)的对应值来给出等级,并且该等级应排序。谁能建议我在R中的表现。
var1 var2 rank
234 1456 1
24 456 3
34 456 2
68 343 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
中,我们可以将rank
与ties.method
一起使用
with(df, rank(-var2, -var1, ties.method = 'last'))