2

複数の列を含む data.table があります。これは、次のようによく表されます。

DT <- data.table(date = as.IDate(rep(c("2012-10-17", "2012-10-18", "2012-10-19"), each=10)), 
                   session = c(1,2,3), price = c(10, 11, 12,13,14), 
                   volume = runif(30, min=10, max=1000)) 

特定のタイプのセッションで各価格で取引されたボリュームを示す複数列のテーブルを抽出したいと思います。各列は日付を表しています。

現在、次を使用してこのデータを一度に 1 日付ずつ抽出します。

DT[session==1,][date=="2012-10-17", sum(volume), by=price]

次に、列をバインドします。

私が現在行っているように、単一のクエリをすべてくっつけずに最終製品 (各列が特定の日付を参照するテーブル) を取得する方法はありますか?

ありがとう

4

1 に答える 1

2

以下はあなたが望むことをしますか?

reshape2と data.tableの組み合わせ

library(reshape2)

.DT <- DT[,sum(volume),by = list(price,date,session)][, DATE := as.character(date)]
# reshape2 for casting to wide -- it doesn't seem to like IDate columns, hence
# the character DATE co
dcast(.DT, session + price ~ DATE, value.var = 'V1')

    session price 2012-10-17 2012-10-18 2012-10-19
1        1    10   308.9528   592.7259         NA
2        1    11   649.7541         NA   816.3317
3        1    12         NA   502.2700   766.3128
4        1    13   424.8113   163.7651         NA
5        1    14   682.5043         NA   147.1439
6        2    10         NA   755.2650   998.7646
7        2    11   251.3691   695.0153         NA
8        2    12   791.6882         NA   275.4777
9        2    13         NA   111.7700   240.3329
10       2    14   230.6461   817.9438         NA
11       3    10   902.9220         NA   870.3641
12       3    11         NA   719.8441   963.1768
13       3    12   361.8612   563.9518         NA
14       3    13   393.6963         NA   718.7878
15       3    14         NA   871.4986   582.6158

セッション 1 だけが必要な場合

dcast(.DT[session == 1L], session + price ~ DATE)

   session price 2012-10-17 2012-10-18 2012-10-19
1        1    10   308.9528   592.7259         NA
2        1    11   649.7541         NA   816.3317
3        1    12         NA   502.2700   766.3128
4        1    13   424.8113   163.7651         NA
5        1    14   682.5043         NA   147.1439
于 2012-11-06T23:59:54.837 に答える