2

リストをMF含む105リストがあります。すべてのリスト、MF[[1]] MF[[2]]....MF[[105]]には、異なる数のデータフレームが含まれています。したがって、MF[[1]][[1]]存在しますがMF[[1]][[2]]NULLのデータ フレームが 1 つしかないためMF[[1]]です。一方MF[[2]]、15 の異なるデータ フレームが含まれているため、MF[[2]][[1]]toMF[[2]][[15]]が存在します。

すべてのcolnames105 リストのすべてのデータ フレームは次のとおりです。

[1] "Run"             "Fecha"           "Serie"           "Patrimonio"      "Ret Log Pat"     "Percentil 5%"    "Percentil Monto"

具体的な例を挙げて質問します。15 の異なるデータ フレームを含む MF[[2]] を使用してみましょう。これらのデータ フレームのヘッダーの一部を次に示します。

head(MF[[2]][[1]]):
 Run      Fecha Serie Patrimonio  Ret Log Pat Percentil 5% Percentil Monto
31 8011 2002-08-18     1 4191689227 -0.456258862   -0.1973659      1305605031
32 8011 2002-08-19     1 4749171865  0.124866449   -0.2179453       913558775
33 8011 2002-08-20     1 5132656241  0.077653052   -0.2179453      1035059470
34 8011 2002-08-21     1 5088469783 -0.008646158   -0.2179453      1118638070
35 8011 2002-08-22     1 4998945148 -0.017750234   -0.2179453      1109007841
36 8011 2002-08-23     1 5449454077  0.086288515   -0.2179453      1089496372

head(MF[[2]][[2]])
    Run      Fecha Serie Patrimonio   Ret Log Pat Percentil 5% Percentil Monto
31 8011 2006-05-09   100 6413583009 -0.0076314490  -0.07046562       455399234
32 8011 2006-05-10   100 6412446421 -0.0001772315  -0.07046562       451937105
33 8011 2006-05-11   100 6380254435 -0.0050328784  -0.07046562       451857014
34 8011 2006-05-12   100 6381112038  0.0001344061  -0.07046562       449588586
35 8011 2006-05-13   100 6381970402  0.0001345073  -0.07046562       449649018
36 8011 2006-05-14   100 6315827940 -0.0104180360  -0.07046562       449709503

head(MF[[2]][[3]])
    Run      Fecha Serie Patrimonio   Ret Log Pat Percentil 5% Percentil Monto
31 8011 2002-08-18     2 3147993667 -0.0395416467  -0.03216529       105340167
32 8011 2002-08-19     2 3065335420 -0.0266083198  -0.03778848       118957901
33 8011 2002-08-20     2 3044946268 -0.0066737439  -0.03778848       115834372
34 8011 2002-08-21     2 3089802537  0.0146239300  -0.03778848       115063897
35 8011 2002-08-22     2 3090714960  0.0002952578  -0.03778848       116758947
36 8011 2002-08-23     2 3230667973  0.0442864759  -0.03778848       116793426

私が欲しいのは、列に一致する反復などです"Fecha"(ちなみに)、日付が一致する場合は、日付が一致する合計に対する"Date" 列の各行を表すパーセントを計算します。"Patrimonio""Patrimonio"

例:

この場合、次のようになりました。

head(MF[[2]][[1]]):
     Run      Fecha Serie Patrimonio  Ret Log Pat Percentil 5% Percentil Monto
    31 8011 2002-08-18     1 4191689227 -0.456258862   -0.1973659      1305605031

 head(MF[[2]][[3]])
        Run      Fecha Serie Patrimonio   Ret Log Pat Percentil 5% Percentil Monto
    31 8011 2002-08-18     2 3147993667 -0.0395416467  -0.03216529       105340167

したがって、MF[[2]][[1]][1,2]==MF[[2]][[3]][1,2](日付が一致する)、次のように各データ フレームに新しい列が必要です。

  New column for MF[[2]][[1]] = MF[[2]][[1]][1,4]/(MF[[2]][[1]][1,4]+MF[[2]][[3]][1,4]) =  4191689227/( 4191689227+ 3147993667) ( Percent Calculation over "Patrimonio" column )

 New column for MF[[2]][[3]] = MF[[2]][[3]][1,4]/(MF[[2]][[1]][1,4]+MF[[2]][[3]][1,4]) =  3147993667/( 4191689227+ 3147993667) ( Percent Calculation over "Patrimonio" column )

"Patrimonio"問題は、変数によるパーセントを計算するために、15 個のデータ フレームすべてを一致させなければならないということです"Fecha"。私の疑問が十分に明確であることを願っています。

4

2 に答える 2

1

私はこのような問題に対して plyr が好きですが、あなたが何を望んでいるのかよくわかりません。あなたのデータでこれを試してみませんか?tmp5 は、あなたが到達しようとしているものだと思います。

dat <- ldply(lapply(MF,ldply)) # Flatten
tmp4 <- ddply(dat,.(.id,Fecha),summarize,Percent=Patrimonio) # Pull-out
tmp5 <- na.omit(ddply(tmp4,.(.id,Fecha),summarize,New=Patrimonio[1]/(Patrimonio[1] + Patrimonio[2]))) # Calculate, when you do this do you get what you expect?


# Dummy data
 MF <- list() 
    tmp <- data.frame(Fecha=letters[1:10],Patrimonio=rnorm(10))
    tmp2 <- data.frame(Fecha=letters[1:10],Patrimonio=rnorm(10))
    MF$a <- list(tmp,tmp2)
    MF$b <- list(tmp,tmp2)
于 2012-10-18T14:51:34.537 に答える
1

ヘッダーに「5%」があるため、データを簡単に使用できません。applyただし、最初のステップではファミリを使用する必要があります。

lapply(MF, yourfunction)

yourfunctionの各要素に適用されますML。の各要素MLもリストであるため、再度ラップすることができます (yourfunctionまたはlapply(MF, lapply, yourfunction).

yourfunction単一の で必要な計算を実行するために機能するものになりますdata.frame。これらのネストされた構造から 1 つを抽出し、それに対して機能する関数を作成するのが最も簡単だと思います。次に、ネストされたリストのすべてのメンバーに適用することを心配してください。

data.frames 間の日付を比較したいようです。この場合、最善の策は、それらをリストにネストするのではなく、1 つのフレームに結合することです。

これにはいくつかの方法がありますが、私はplyr.

library(plyr)
ldply(unlist(MF, recursive=FALSE), as.data.frame)

その場合、比較ははるかに簡単です。

于 2012-10-18T14:39:52.540 に答える