2012-02-21 8 views
2

合計の下で変数の値の合計。 転置しないでエレガントにするには? それぞれの下の表(fTicker、DATE_f)では、wghtの値を合計して、の値wghtの値を加算してsTickerを除外します。:他の変数を条件と除外特定の値を持つグループによるVaRの値の条件

以下の表に

、(excl_val、ステッカー= A)|(fTicker = XLK、DATE_f = 2003年6月20日)= wght_AAPL_6/20/2003_XLK + wght_AA_6/20/2003_XLKなくステッカー= A用WGHT

+---------+---------+-----------+-------------+-------------+ 
| sTicker | fTicker | DATE_f | wght  | excl_val | 
+---------+---------+-----------+-------------+-------------+ 
| A  | XLK  | 6/20/2003 | 0.087600002 | 1.980834016 | 
| A  | XLK  | 6/23/2003 | 0.08585  | 1.898560068 | 
| A  | XLK  | 6/24/2003 | 0.085500002 |    | 
| AAPL | XLK  | 6/20/2003 | 0.070080002 |    | 
| AAPL | XLK  | 6/23/2003 | 0.06868  |    | 
| AAPL | XLK  | 6/24/2003 | 0.068400002 |    | 
| AA  | XLK  | 6/20/2003 | 1.910754014 |    | 
| AA  | XLK  | 6/23/2003 | 1.829880067 |    | 
| AA  | XLK  | 6/24/2003 | 1.819775 |    | 
|   |   |   |    |    | 
|   |   |   |    |    | 
+---------+---------+-----------+-------------+-------------+ 

いくつかのfTickerグループは、それらの多くのステッカー(10〜70)であり、いくつかのステッカーは、いくつかのfTickerに属していてもよいです。最終的な結果は、各DATE_fおよび各fTickerの各sTickerのexcl_valでなければなりません。

私はRで6ギガバイトが、同じアプローチについてのファイルを結果とSASに移調でそれをやった、40ギガバイトのメモリを爆破し、それは基本的には実行不可能です。 Rで

、私は限り、この

weights$excl_val <- with(weights, aggregate(wght, list(fTicker, DATE_f), sum, na.rm=T)) 

として得たが、それは(必要な観測を除外しない)だけの単純な合計だと行の長さとの間に不一致があります。私は和からWGHT用ステッカーOBSを除外するために合計を調整することができれば、私はそれがうまくいくかもしれないと思います。

excl_val長さについて:私はExcelで計算され、わずか2セルについて、それはそれは

ありがとう短いだ理由です!

アルセ

答えて

1

あなたはdata.frame中のデータを持っている場合は、行は(特に、列が同じ長さを持つべきである) 意味があるならば、それは優れている:この場合 、excl_valはAのように見えます別のベクトル。 は、それがdata.frameに含まれている情報を入れた後、 事が容易になります。

# Sample data 
k <- 5 
d <- data.frame(
    sTicker = rep(LETTERS[1:k], k), 
    fTicker = rep(LETTERS[1:k], each=k), 
    DATE_f = sample(seq(Sys.Date(), length=2, by=1), k*k, replace=TRUE), 
    wght = runif(k*k) 
) 
excl_val <- sample(d$wght, k) 
# Add a "valid" column to the data.frame 
d$valid <- ! d$wght %in% excl_val 
# Compute the sum 
library(plyr) 
ddply(d, c("fTicker","DATE_f"), summarize, sum=sum(wght[valid])) 
+0

は、コードをありがとう!私はそれを実行し、最終結果はfTicker、DATE_fとsumのテーブルです。質問のようにsTicker列をテーブルに戻すにはどうすればよいですか? 'ddply(D、C( "fTicker"、 "DATE_f")、変換、合計=合計(WGHT))': –

+0

あなたは代わりに 'summarize'の' transform'を使用することができます。 –

+0

私はこれがちょっと違うと思います。同じ日付と同じfTickerの異なるsTickerのexclと同じ値を与えるからです。 + --------------- ------------------------------------------- + | sTicker fTicker DATE_f wght有効な合計| + ------------------------------------------------ ---------- + | 1 A A 2012-02-21 0.14107461 FALSE 2.1644542 | | 2 B A 2012-02-21 0.54263663 TRUE 2.1644542 | | 3 C A 2012-02-21 0.60238962 TRUE 2.1644542 | + ------------------------------------------------ ---------- + ' –

関連する問題