2014-12-02 11 views
5

Oto kod oceniającym na podstawie kolumny v2:Jak szeregować wiersze po dwie kolumny naraz w R?

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

Ale naprawdę chcę oceniającym na podstawie zarówno v2 i/następnie v1 ponieważ istnieją więzi w v2. Jak mogę to zrobić bez używania RPostgreSQL?

Odpowiedz

1

Jak o:

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

Po pierwsze, 'ties.method' nie jest potrzebne,' order' nie będzie mieć więzi. Po drugie, zawodzi z tymi danymi: 'x <- data.frame (v1 = c (2,3,1,2,1), v2 = c (1,1,3,2,1))', więc jest po prostu źle. – user

2

order prac, ale do manipulowania ramek danych, również sprawdzić pakiety plyr i dplyr.

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

Tutaj tworzymy ciąg liczb, a następnie uporządkować je tak, jakby został stworzony przy zamówionej danych:

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

czyli

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

lub nawet:

x$rank <- rank(order(order(x$v2,x$v1)))