2016-03-22 1 views
0

私は各日付のオプション情報を含むデータフレームを持っています。各日付は、行使価格の変化範囲に対応する複数の行があります:私は216日を持ってR:スプリットデータフレーム、次に実行する:各スプリットの各機能(ソート)

head(df) 
     Date C/P K  Vol  Delta  ID 
1 01/23/1997 0 805 0.155814 0.234181 10007288 
2 01/23/1997 1 790 0.159603 -0.609276 10333499 
3 01/23/1997 0 815 0.141776 0.132414 10106825 
4 01/23/1997 1 700 0.257233 -0.060976 10012499 
5 01/23/1997 1 680 0.279465 -0.035616 10072595 
6 01/23/1997 0 730 0.197782 0.888286 10307920 

を、それぞれの日付は100〜300行、各行使価格のための1つを持っています。データフレームを日付別に分割し、それぞれの日付フレームに対して、プライマリソートキーとしてC/Pを使用し、セカンダリソートキーとしてKを使用します。

plyrは使用するパッケージですか?私はsplit(df、df $ Date)を試しましたが、各分割データフレームにソート関数を適用することについてのドキュメントは見つかりません。一次および二次並べ替え

、Iは平均:

Input: 
C/P K Vol Delta 
0 800 0.1 0.11 
1 800 0.2 0.22 
1 700 0.3 0.33 
0 700 0.4 0.44 
1 900 0.5 0.55 
1 600 0.6 0.66 
0 600 0.7 0.77 
0 900 0.8 0.88 

Output: 
C/P K Vol Delta 
0 600 0.7 0.77 
0 700 0.4 0.44 
0 800 0.1 0.11 
0 900 0.8 0.88 
1 600 0.6 0.66 
1 700 0.3 0.33 
1 800 0.2 0.22 
1 900 0.5 0.55 
+1

'lapply(split(df、df $ Date)、function(x)x [order(x [[" C/P "]]、x [[" K "]])、あなたが期待される結果を示したならば、より有益な情報になりました。ところで、データセットを分割する必要はありません。これは、 'data.table/dplyr'すなわち' setDT(df)[order( "C/P"、K)、.SD、by = Date]でより簡単に行うことができます。 '' C/P'カラム名は多少です問題がある。 – akrun

+1

'df [order(df $ Date、df $ 'C/P')]]のようなものですか? – JeremyS

+0

表示されている例から期待される出力を使用してください。 – akrun

答えて

0

我々はsplit出力からlist要素をループにlapplyを使用し、order「C/P」と「K」の列と行をすることができ操作によってグループのいずれかを行うことができ、split方法の

lapply(split(df, df$Date), function(x) 
      x[order(x[["C/P"]], x[["K"]]),]) 

またはその代わりに値。 data.tableでは、我々は(setDT(df)) 'data.table' から 'data.frame' を変換し、 '日付' によってグループ化され、私たちは 'I' に "C/P" と "K" の列をorderSubset of Data.table

を取得します
setDT(df)[order(eval(as.name("C/P")), K), .SD, by = Date] 

これは、「日付」、列に基づいてorderでグループ化し、残りの列に対していくつかの操作を行う場合に便利です。

関連する問題