2014-12-02 50 views
5

下面是排名基于列V2代码:如何在R中一次对两列进行排名?

x <- data.frame(v1 = c(2,1,1,2), v2 = c(1,1,3,2)) 
x$rank1 <- rank(x$v2, ties.method='first') 

但我真的想排名基于两个v2和/ V1则由于在V2的关系。我怎样才能不使用RPostgreSQL?

回答

1

如何:

within(x, rank2 <- rank(order(v2, v1), ties.method='first')) 

# v1 v2 rank1 rank2 
# 1 2 1  1  2 
# 2 1 1  2  1 
# 3 1 3  4  4 
# 4 2 2  3  3 
+1

首先,'tie.method'不是必需的,'order'不会有关系。其次,这个数据失败:'x < - data.frame(v1 = c(2,3,1,2,1),v2 = c(1,1,3,2,1))',所以它是错了。 – user 2017-05-12 05:07:51

2

order作品,但对于操纵数据帧,还检查出plyrdplyr包。

> arranged_x <- arrange(x, v2, v1) 
0

这里我们创建了一个数字序列,然后重新排序,如果它是附近的有序数据发布:

x$rank <- seq.int(nrow(x))[match(rownames(x),rownames(x[order(x$v2,x$v1),]))] 

或者:

x$rank <- (1:nrow(x))[order(order(x$v2,x$v1))] 

甚至:

x$rank <- rank(order(order(x$v2,x$v1))) 
相关问题