2016-10-11 15 views
6

私は無限にこれを探して何とか何もこれを解決していません簡単問題です。Rのデータフレームの順序を逆にする方法

私はPriceというデータフレームを持っています。そこには4つの列があり、そのうちの1つは過去の日付のリストです。もう1つは製品の価格の一覧です。

1 10/10/2016 53.14 50.366 51.87 
2 07/10/2016 51.93 49.207 50.38 
3 06/10/2016 52.51 49.655 50.98 
4 05/10/2016 51.86 49.076 50.38 
5 04/10/2016 50.87 48.186 49.3 
6 03/10/2016 50.89 48.075 49.4 
7 30/09/2016 50.19 47.384 48.82 
8 29/09/2016 49.81 46.924 48.4 
9 28/09/2016 49.24 46.062 47.65 
10 27/09/2016 46.52 43.599 45.24 

リストの価格は252です。リストの一番下に最新の日付が格納され、リストの一番下に最新価格が列挙された対応する価格が保存されるようにするにはどうすればよいですか?

+5

'df'が' data.frame'の場合、日付列は 'date'と呼ばれ、データセットを日付順にソートするには' df [order(df $ date)]]を試してください。 – nicola

+0

'date'カラムが' as.Date'に設定されていることを確認してください – Sotos

+2

OPの日付は 'Date'オブジェクトではありません。残念ながら@Sotosです。もしあれば、ISO形式の文字列になります。私は非常に好奇心が強いのですが、表示順序が重要なのはなぜですか(注文に依存する処理を手助けすることができるため)。しかし、OPはそれを逆順に持っているようで、 'df [252:1、]'の行数も分かります。 – hrbrmstr

答えて

7

あなただけのデータフレーム内の行の順序を逆にしたい場合は、以下の操作を行うことができます

df<- df[seq(dim(df)[1],1),] 
+0

良い解決策。しかしここで 'seq'は必要ありません。コードを遅くするだけです。 – 5th

4

ただ、完全酒のために。実際にseqに電話する必要はありません。ここに私の裁判で

### Create some sample data 
n=252 
sampledata<-data.frame(a=sample(letters,n,replace=TRUE),b=rnorm(n,1,0.7), 
         c=rnorm(n,1,0.6),d=runif(n)) 

### Compare some different ways to reorder the dataframe 
myfun1<-function(df=sampledata){df<-df[seq(nrow(df),1),]} 
myfun2<-function(df=sampledata){df<-df[seq(dim(df)[1],1),]} 
myfun3<-function(df=sampledata){df<-df[dim(df)[1]:1,]} 
myfun4<-function(df=sampledata){df<-df[nrow(df):1,]} 

### Microbenchmark the functions 


microbenchmark::microbenchmark(myfun1(),myfun2(),myfun3(),myfun4(),times=1000L) 
    Unit: microseconds 
     expr min  lq  mean median  uq  max neval 
    myfun1() 63.994 67.686 117.61797 71.3780 87.3765 5818.494 1000 
    myfun2() 63.173 67.686 99.29120 70.9680 87.7865 2299.258 1000 
    myfun3() 56.610 60.302 92.18913 62.7635 76.9155 3241.522 1000 
    myfun4() 56.610 60.302 99.52666 63.1740 77.5310 4440.582 1000 

最速の方法df<-df[dim(df)[1]:1,]を使用していた:あなたは: -R-ロジックを使用することができます。ただしdimの代わりにnrowを使用するとわずかに遅くなります。これを個人的な好みの問題にする。

ここでseqを使用すると、プロセスが遅くなることは間違いありません。

関連する問題