2011-08-22 5 views
16

내 데이터 프레임의 행을 변경/반전하고 데이터를 조 변경하지 않고 맨 아래 행을 맨 위로 이동하는 등의 작업이 필요합니다. 데이터 프레임 인 경우 :행렬/데이터 프레임의 행 순서 변경

1 2 3 
4 5 6 
7 8 9 

가 나는 약 sort()을 읽었습니다하지만 난 그것이 내가 필요한 것을 생각하지 않습니다 또는 내가 찾을 수 아니에요

7 8 9 
4 5 6 
1 2 3 

로 변환해야 그 길.

답변

29

은 아마 더 우아한 방법이 있습니다,하지만,이 작품 : 당신이 행 인덱스로 정수의 반대 순서로 행렬을 색인하고 있기 때문에

m <- matrix(1:9, ncol=3, byrow=TRUE) 

# m[rev(seq_len(nrow(m))), ] # Initial answer 
m[nrow(m):1, ] 
    [,1] [,2] [,3] 
[1,] 7 8 9 
[2,] 4 5 6 
[3,] 1 2 3 

이 작동합니다. nrow(m):1 결과는 3 2 1입니다.

7

I 당신은 dplyr 패키지를 사용하여 data.frame의 순서를 반전시킬 수

revdata <- thedata[dim(thedata)[1L]:1,] 
24

이 라인을 따라, 인덱스 행의 수로 시작하는 행을 반대 것 :

iris %>% arrange(-row_number()) 

을 또는 파이프 작업자를 사용하지 않고 수행

arrange(iris, -row_number()) 
+1

가장 인기있는 답변을해야을 이럴 ... –

+1

또는'아이리스 [순서 (row.names (아이리스) , reduced = T),]' –

+1

@VeerendraGadekar "고아"쉼표가 있고 관심 표를 두 번 지정하고 라운드 및 대괄호를 혼합하기 때문에 솔루션이 덜 직관적이라고 생각합니다. 나는 이것이 올바른 base-r 문법이라는 것을 알고 있지만, 내 취향에는 약간의 우아함이 부족하다. –

2

Veeery 늦었지 만 작업이 쉬운 것 같습니다. g 빠르면 추가 패키지가 필요없고 간단합니다.

for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])} 

자주 사용하는 경우 기능을 사용하지 않을 것으로 생각됩니다. R v = 3.3.1로 테스트되었습니다.

3

우리는 (data.frame 만 해당) row.names의 역순 수 있습니다

# create data.frame 
m <- matrix(1:9, ncol=3, byrow=TRUE) 
df_m <- data.frame(m) 

#reverse 
df_m[rev(rownames(df_m)), ] 

# X1 X2 X3 
# 3 7 8 9 
# 2 4 5 6 
# 1 1 2 3