2011-08-22 12 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

私はこの線に沿って、インデックスが行数で始まる行を逆に考え

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

あなたはdplyrパッケージを使用してdata.frameの順序を逆にすることができます:

iris %>% arrange(-row_number()) 

またはパイプオペレーターを使わずに

arrange(iris, -row_number()) 
+1

は、最も人気のある回答私見でなければなりません... –

+1

や 'アイリス[オーダー(row.names(アイリス) 、減少する= T)、] ' –

+1

@VeerendraGadekar私はあなたのソリューションは、"孤立した "カンマを持っているので、直感的ではないと思う、関心のあるテーブルを2回指定し、丸い角かっこを混ぜる。私はこれが正しいbase-r構文であることを知っていますが、私の好みではいくらかエレガンスが欠けています。 –

2

Veeery lateしかし、これはうまくいくようですg高速ですが、特別なパッケージは必要なく簡単です:

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

私は頻繁に使用するためには、1つは機能しないと思います。 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 
関連する問題