2011-08-22 20 views
16

Veri çerçevemdeki satırları değiştirmem/tersine çevirmem gerekiyor, verileri aktarmıyor, ancak alt sırayı en üste taşıyor vb. veri çerçevesi olsaydı:Satır sırasını bir matris/veri çerçevesinde değiştirme

1 2 3 
4 5 6 
7 8 9 

Ben yaklaşık sort() okudum ama neye ihtiyacım olduğunu sanmıyorum yoksa bulmak mümkün değilim

7 8 9 
4 5 6 
1 2 3 

dönüştürmek gerekir yol.

cevap

29

muhtemelen daha şık yolu vardır, ancak bu çalışır: satır endeks olarak tamsayılar bir ters dizisi ile matris indeksleme çünkü

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 

Bu çalışır. nrow(m):1, 3 2 1 ile sonuçlanır.

7

Ben Sen dplyr paketini kullanarak bir data.frame sırasını tersine çevirebilir

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

bu hat boyunca, bir indeks satır sayısı ile başlayan satırlar ters olacaktır:

iris %>% arrange(-row_number()) 

Veya boru işlecini kullanmadan

arrange(iris, -row_number()) 
+1

en popüler cevap olmalıdır imho ... –

+1

Ya 'iris [sipariş (row.names (iris) , azalan = T),] –

+1

@VeerendraGadekar Çözümünüzün daha az sezgisel olduğunu düşünüyorum çünkü "yetim" virgül kullanıyor, ilgi tablosunu iki kez belirliyor ve yuvarlak ve köşeli parantezleri karıştırıyor. Bunun doğru bir baz-r sözdizimi olduğunu biliyorum ama benim zevkime göre biraz zarafet yok. –

2

Veeery geç, ama bu iş yerinde görünüyor. g hızlı, herhangi bir ekstra paketlere ihtiyaç ve basit değildir:

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

sanırım sık kullanım için, tek bunun dışında bir işlev vereceğini söyledi. R v = 3.3.1 ile test edilmiştir.

3

Biz (data.frame için) row.names sırasını tersine çevirebilir:

# 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 
İlgili konular