2013-02-11 2 views

답변

32

글쎄, 난 아무 문제가 여기에 있어요 :

df <- data.frame(v=1:5, x=sample(LETTERS[1:5],5)) 
df 

# v x 
# 1 1 D 
# 2 2 A 
# 3 3 B 
# 4 4 C 
# 5 5 E 

df <- df[order(df$x),] 
df 

# v x 
# 2 2 A 
# 3 3 B 
# 4 4 C 
# 1 1 D 
# 5 5 E 
6
#sort dataframe by col 
sort.df <- with(df, df[order(sortbythiscolumn) , ]) 

#can also sort by more than one variable: sort by col1 and then by col2 
sort2.df <- with(df, df[order(col1, col2) , ]) 

#sort in reverse order 
sort2.df <- with(df, df[order(col1, -col2) , ]) 
+0

나는 이것이 아직 명확하지 않다고 생각한다.'col1'은'df $ col1'이어야한다. 이 부분을 편집 할 수 있다면 기꺼이 찬성표를 드리겠습니다. 그리고 아마 여기에'with '를 잘 사용할 수도 있습니다! – Arun

+3

(+1) 차라리'df [with (df, order (col1, col2)),]'를 사용하고 싶지만 둘 다 똑같은 것 같습니다. – Arun

3

사용 order 기능 :

또 다른 해결책은 doBy 패키지에서 orderBy 기능을 사용하는 것입니다
set.seed(1) 
DF <- data.frame(ID= sample(letters[1:26], 15, TRUE), 
       num = sample(1:100, 15, TRUE), 
       random = rnorm(15), 
       stringsAsFactors=FALSE) 
DF[order(DF[,'ID']), ] 
    ID num  random 
10 b 27 0.61982575 
12 e 2 -0.15579551 
5 f 78 0.59390132 
11 f 39 -0.05612874 
1 g 50 -0.04493361 
2 j 72 -0.01619026 
14 j 87 -0.47815006 
3 o 100 0.94383621 
9 q 13 -1.98935170 
8 r 66 0.07456498 
13 r 39 -1.47075238 
15 u 35 0.41794156 
4 x 39 0.82122120 
6 x 94 0.91897737 
7 y 22 0.78213630 

:

> library(doBy) 
> orderBy(~ID, DF) 
5

plyr 패키지의 arrange 기능을 사용하면 여러 열로 쉽게 정렬 할 수 있습니다. 예를 들어, ID 먼저 다음 num에 의해 감소에 의해 DF, 당신이 정말 @ Ramnath의 대답에 속하는

plyr::arrange(DF, ID, desc(num)) 
0

를 작성할 수 정렬하려면하지만 난 아직 충분히 명성을 가지고 있지 않는 한 내가 말씀 드릴 수 없습니다. plyr 패키지와 같은 방법으로 dplyr 패키지의 arrange 기능을 사용할 수도 있습니다.

library(dplyr) 
arrange(DF, ID, desc(num)) 
0

열에 수준 또는 인수가 있으면 order() 함수가 실패합니다. stringsAsFactors = FALSE가 data.frame 생성에 사용되면 올바르게 작동합니다.

관련 문제