2011-08-22 22 views
16

我需要更改/顛倒我數據框中的行,而不是轉置數據,但將底部行移動到頂部,依此類推。如果數據幀是:更改矩陣/數據框中的行順序

1 2 3 
4 5 6 
7 8 9 

我需要轉換爲

7 8 9 
4 5 6 
1 2 3 

我讀過有關sort(),但我不認爲這是我需要的,或者說我能找到方式。

回答

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

我將扭轉的索引開始的行數的行中,沿着這條線

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

可以使用dplyr包反轉data.frame的順序:

iris %>% arrange(-row_number()) 

或者沒有使用管道操作員做

arrange(iris, -row_number()) 
+1

應該是最普遍的回答恕我直言... –

+1

或'光圈[順序(row.names(IRIS) ,下降= T)]' –

+1

@VeerendraGadekar我認爲你的解決方案不太直觀,因爲它有一個「孤立」逗號,指定兩次感興趣的表,並且正在混合圓括號和方括號。我知道這是正確的base-r語法,但它缺乏我的口味中的一些優雅。 –

2

Veeery遲了,但這似乎是workin摹快,不需要任何額外的軟件包,並很簡單:

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

我想這對於經常使用,一會做一個函數出來。 用R v = 3.3.1進行測試。

3

我們可以扭轉row.names的順序(data.frame只):

# 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