2016-03-22 5 views
1

私のワークスペースには、dfoという216個のオブジェクトのリストがあります。各オブジェクトはデータフレームであり、最初の2つのオブジェクトが示されている各データフレームのデータフレームのリストに適用

> head(index) 
     Date Index 
1 01/23/1997 776.64 
2 02/20/1997 800.35 
3 03/20/1997 778.04 
4 04/17/1997 760.49 
5 05/22/1997 833.86 
6 06/19/1997 888.99 

リストdfo Iにおいて:

> head(dfo) 
$`1997-01-23` 
     Date C/P K  Vol  Delta  ID 
56 1997-01-23 0 400  NA  NA 11690674 
10 1997-01-23 0 550  NA  NA 10376194 
34 1997-01-23 0 600  NA  NA 11036690 
58 1997-01-23 0 650  NA  NA 11544898 
27 1997-01-23 0 660  NA  NA 10759732 
52 1997-01-23 0 670  NA  NA 11439157 
50 1997-01-23 0 680 0.176301 0.995920 11364929 
60 1997-01-23 0 690 0.185490 0.99
39 1997-01-23 0 700 0.203161 0.972175 11183860 
65 1997-01-23 0 710 0.200024 0.955090 11730364 
38 1997-01-23 0 720 0.202629 0.923953 10982863 
. .   . . .   .  . 
. .   . . .   .  . 
. .   . . .   .  . 
45 1997-01-23 1 785 0.160904 -0.552771 10986679 
2 1997-01-23 1 790 0.159603 -0.609276 10333499 
23 1997-01-23 1 795 0.156346 -0.666208 10456682 
47 1997-01-23 1 800 0.154266 -0.719749 11072475 
44 1997-01-23 1 805 0.150034 -0.773075 11165557 
63 1997-01-23 1 810 0.151855 -0.812170 11764824 
53 1997-01-23 1 815 0.150437 -0.851131 11378977 
62 1997-01-23 1 820  NA  NA 11532248 
18 1997-01-23 1 825  NA  NA 10428721 
41 1997-01-23 1 830  NA  NA 10985583 

$`1997-02-20` 
      Date C/P K  Vol  Delta  ID 
125 1997-02-20 0 400  NA  NA 11116217 
139 1997-02-20 0 450  NA  NA 11285261 
157 1997-02-20 0 475  NA  NA 11697618 
100 1997-02-20 0 500  NA  NA 10744183 
167 1997-02-20 0 525  NA  NA 11659969 
162 1997-02-20 0 550  NA  NA 11774819 
79 1997-02-20 0 575  NA  NA 10237388 
150 1997-02-20 0 600  NA  NA 11441546 
118 1997-02-20 0 610  NA  NA 10875377 
72 1997-02-20 0 620  NA  NA 10249544 
121 1997-02-20 0 625  NA  NA 10924970 
85 1997-02-20 0 630  NA  NA 10387622 
102 1997-02-20 0 635  NA  NA 10599759 
107 1997-02-20 0 640  NA  NA 10770025 
124 1997-02-20 0 645  NA  NA 11068359 
129 1997-02-20 0 650  NA  NA 10883922 
105 1997-02-20 0 660  NA  NA 10485716 
123 1997-02-20 0 670  NA  NA 11020541 
175 1997-02-20 0 675 0.244968 0.994066 10350962 
98 1997-02-20 0 680 0.261206 0.989390 10574981 
. .   . . .   .  . 
. .   . . .   .  . 
. .   . . .   .  . 
99 1997-02-20 1 830 0.182276 -0.719366 10719331 
163 1997-02-20 1 840 0.178969 -0.797619 11657641 
132 1997-02-20 1 850 0.178679 -0.858147 11205448 
169 1997-02-20 1 875  NA  NA 11759335 
67 1997-02-20 1 900  NA  NA 10001169 
90 1997-02-20 1 925  NA  NA 10196550 

私は、データフレームを有する216行2列のindexベクトルdfo$Kをその日付の対応するindex$Index値で除算したいとします。データフレームのリストdfoの216の日付とindexデータフレームの216の日付は完全に対応していますが、冗長性のためにdfoindexの両方にDateの列が含まれています。

この場合、lapplyはどのように実装しますか?私は216のデータフレームのリストを216行のデータフレームとインターフェースする方法を実際に理解していません。

+1

「mapply」を参照してください。 – coffeinjunky

+2

あなたのdata.framesのリストがすべて同じ列を持ち、データを区別する 'Date'カラムを持っているとすれば、それらをすべてひとつの大きなdata.frameにまとめて' do.call(rbind、dfo ) 'これはあなたが作業するのが簡単なので、' merge'や 'dplyr'などを使うことができます。できるだけ変更を加えたくない場合は、 'mapply'や' Map'などの方法があります。 – alistaire

+1

リスト内のテーブルが同じ構造の場合、group *処理による単一テーブル*と比較して 'lapply'で処理する方が効率的ではありません。あなたのリストを単一のデータセットに素早くバインドするには、 'rbindlist'関数を探します。 – jangorecki

答えて

1

データフレームリストの各オブジェクトを反復処理し、indexデータフレームと日付でマージすることを検討してください。ループ内で計算K/Indexを実行し、Indexのままにしておき、結果を返します。

newdfList <- lapply(dfList, function(df) {        
         newdf <- merge(ind, df, by='Date') 
         newdf['K'] <- newdf['K']/newdf['Index']        
         newdf['Index'] <- NULL 
         return(newdf) 
        }) 
関連する問題