2012-11-06 141 views
2

我有一個data.table其包含多列,這是良好由表示以下內容:剖子集在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)) 

我想以提取多列表,它示出了交易量按特定類型的會話中的每個價格交易 - 每列代表一個日期。

目前,我使用以下在一個時間提取該數據的一個日期:

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

然後綁定的列。

是否有一種方法可以在不將所有單個查詢都粘在一起的情況下獲得最終產品(每個列引用特定日期的表格) - 正如我目前所做的那樣?

謝謝

+0

我誤解或會'DT [,總和(體積),通過=名單(價格,日期,會話)]'不工作? – mnel

+0

@mnel - 我認爲OP正在討論將列綁定在一起(_「一個表,每列指的是一個特定的日期」)而不是行。我同樣困惑。 – thelatemail

+0

恩,是的,綁定列 - 所以你沒有誤解我的意思。我其實只是想'DT [session == 1,sum(volume),by = list(date,price)]',並且可以從那裏剪切它,使其按照我想要的日期排列。隨時回答,所以我可以接受。 – ricardo

回答

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 
+0

完美。非常感謝。 – ricardo